1)Too many versions too quickly.
Thus is life in the mobile world...
2)Not enough work on backwards compatibility. If I use the 4.0 features, there's no good fallback. Java doesn't help them here- in C++ I could #define in 2.x and 4.x blocks, Java requires lots of reflection aware code because there is no conditional compilation. Or you need to set up special stuff with antenna and the like, which is hard to get working nicely with all the tools.
This is something I have far too much experience with from the world of BlackBerry. I've done both preprocessor hacks (which is supported by the build tools, but Eclipse hates), and fancy crap with libraries/pseudo-reflection/design-patterns (which lesser developers might cringe at figuring out). Either way, its not fun. It basically means that you have to use any new features "by exception", versus "by design", which makes it very hard to fully leverage them if the intent is to make your life as a developer better.
3)The ratio is still out of whack with more 2.x phones sold than 4.0. This is due to so few phones being upgradeable
Or due to carriers not bothering to push updates, when the vendors have. Or due to users not knowing/caring that they should upgrade. Or due to people clinging to their ancient phones and developers having a hard time justifying cutting them off if they want to maximize adoption. Regardless, having so many players between "OS upstream source" and "end user's device", you're pretty much doomed to this problem.
4)For whatever reason, I don't see a lot of open source stepping in to help this. On the PC, there's be open source libraries galore to step into the gap. On mobiles, not so much. I think the idea of easy monetization via ads (regardless of how much you actually make) has helped to kill the open source movement on mobile phones. Plenty of free help out there, but not much in the way of quality libraries. But these are the people who generally would be jumping on new features. Without them, its mostly commercial devs and they just want to target the mass market.
On the PC, you also have continual upgrades to common libraries separate from the whole OS, and sometimes even multiple versions of libraries installed. Additionally, the upgrade cycles of the hardware are almost completely separated from the upgrade cycles of these libraries. (at least in relation to the time scales we're talking about)
I also agree that the mobile business models have greatly discouraged open source. Its quite frustrating, too, since it places far more burden on the shoulders of the platform vendor to provide everything. There's also this idea that you're supposed to try and make money off any and every mobile project. Regardless of how likely you are to actually succeed, you're looked down upon if you don't at least try. And often trying, means your effort isn't going to be open source at all. (Personally, I'd rather make something open-source and gain the community benefits than try to make an insignificant pittance off it as closed-source. If I'm closing something down, its because the monetary benefit is real and not imagined.)