Firstly, I think backwards compatibility is a good thing. One of the reasons Microsoft do well (and I am no fan of M$) is that they spend a lot of time trying to get backwards compatibility right. Ok, there are times when it gets broken but they pay a lot of attention to it. As a result it is often easier to migrate between M$ s/w versions than it is other vendors products. On large systems you need the ability to migrate to new versions of products (keeps maintenance simply) without spending time moving components to new API's until the move makes business sense.
w.r.t. class loaders, I'm sorry - I just don't see the complexity here. It's good that types are segregated across class loaders. You spend a few hours figuring it out and then you're set for life. Hardly a reason for wholesale re-engineering.