Backwards compatibility can be a good thing too, even if there is some ugliness. Anybody who programs for Unix/Linux can count on the fact that C code that was written 20 years ago still works today. This way tools can be built on one another without having to constantly rewrite them due to APIs becoming obsolete. You mention the Mac as drawing lines in the sand, I'm surprised there is no mention of Windows. Look how many Windows APIs have become obsolete and how many programmers have to learn new ones. This strategy is good for the companies providing the APIS, and perhaps even good for the end user, but it sucks for developers.
If you use a deprecated method or class, you'll get a warning. a good IDE like eclipse makes it easy to get to the javadoc comment that then explains what you should use instead. Sometimes using those deprecated APIs are handy for quick and dirty code because they generally do it in one line, and they tend to work right if you are an english/us locale, latin-1 character set, etc., which in many cases people are. I say this just as I finished getting rid of all my calls to deprecated methods...
I think many of the things you mentioned were not really that important, a few were. You could have also picked a few of .net's features that are improvements over java - avoiding classpath hell with versioned assemblies, unsigned as well as signed types, hey, maybe even delegates if you like that kind of thing. Pretty much any of those features top your list as far as I can tell.