To the person who said you buy "Samsung Android", "Motorola Android", or "HTC Android", you're so right. I have a Samsung/Verizon Android phone. Android is miles better than iOS, but if you buy the wrong phone, you may have a less than "ridiculously amazing" experience. But if you have Stock Android or you flash a ROM that takes the bloat out of your phone, you will experience Android as Google envisioned it, which is an infinitely customizable multi-tasking operating system where any app can interact with the features of any other app.
It's the perfect mash-up OS. Install Facebook, and now you can share anything from any app with people on Facebook. Same thing for Gmail, Skype, Read It Later, task management software like Remember the Milk, and whatever you can thing of. There are fundamental things about the way apps are allowed to multi-task and interact with each other that lets Android be useful in ways that even the developers of individual apps did not plan for. And Chrome/Fox to phone lets you do things like send PDFs from your browser to phone. I do it with my tablet anytime I encounter a document I may need offline at a later date.
Fragmentation is something people like to make a big fuss about, but Android 2.2 is virtually the same as Android 2.3. Android 2.1 to 2.2 contained key features like Apps to SD Card, and a faster Java Compiler that made noticeable differences, but the SDK differences between 2.2 and 2.3 are generally optimizations and support for specific things like gaming SDKs (note that the Playstation Phone runs stock Android 2.3). But many user experience things from Android 2.3, like the improved keyboard, run perfectly on Android 2.2 or 2.1. For many apps, if the user has Android 2.2, they can store the app on the SD card, but if they don't that's the only feature they miss, and while Apps2SD is nice, because it saves you space, you're probably running a 2MB app on a phone with GBs of internal storage. This counts as fragmentation, but it's not a big deal.
The real purpose of Apps2SD is for apps that are bigger than the internal storage of a typical phone, like say an Unreal Engine 3 FPS for Android Tablets. The point is, the Android SDK revisions are about pushing the limits of what's possible on a mobile device moreso than providing end-user functionality. On Android, that's a job left up to apps. On iOS where the core OS experience is written by Apple and only Apple, the OS revisions matter because they affect the end user. On Android, the apps that the end-user installs are allowed to change the core OS experience. Here are two iOS 5 examples:
1. Apple introduced a split-screen keyboard for ease of typing in landscape mode on tablets. On Android, a company called Swiftkey released an alternative keyboard for tablets with split screen functionality along with really advanced predictive text. This is simply not possible on iOS unless Apple chooses to release this.
2. Apple introduced a live lock-screen with notifications. On Android, you can install one of a number of different apps that let you customize your lock screen with the apps you want, the widgets you want, and really create the lock screen experience however you'd like it.
Both of these apps are backwards compatible to Android 2.1, because there are no specific restrictions preventing these things from running on older devices.
Bottom line iOS is an app-playing box. It lets you run apps, but Apple is the one that changes the OS.
Android is the OS you make it. It lets you run apps, but it's apps are allowed to change the OS.
If you read the press about Apple adding features to iOS that they ripped off apps they denied, you will find that the features they were blocking have been implemented by Android developers. Even when Google takes things out of the Android Market, there's nothing that says developers can't distribute their apps on their websites, on MediaFire, or on one of the many other app stores available.
Could you imagine if you couldn't just install whatever software you wanted on your computer?
As someone with an Android 1.6 mp3 player, an Android 2.2 phone, and an Android 3.1 tablet, all at different resolutions and by different manufactures using different CPUs, I can vouch that I run the same apps on all of them. It's very rare that I can't run an app on an older device. If an app can run the version of the OS, it can use all the sdk features, and unless an SDK feature is essential to the way an app runs, developers can gracefully omit that functionality or choose to not support it.
I actually just joined the forums for this rant, so I hope it helps.