This process is not new to Android, it's been around since the birth of the smartphone. The platform creator (Google) releases a new version of the OS (Froyo, Gingerbread, etc.), which starts users clamoring for the tasty treat. The maker of a given handset (Samsung, Motorola, HTC, etc.) then takes the source code in-house and works on getting the new OS version working flawlessly on each phone they produce. If the OEM has made special modifications to the handset for a particular telco, then those have to be updated and tested on top of the basic update. New OS versions often break the OEM apps and widgets, and those must be updated to work properly.
Once the OEM work is done on a given update for a given phone, it is handed off to each carrier handling the phone to test on their network. This testing can be extensive depending on the carrier, and is necessary to make sure that carrier apps/services still work without problems. Once the new software is blessed by the carrier, a ROM image for the phone is prepared for over-the-air (OTA) distribution to the carrier's customers. This ROM creation is not trivial, as a bad ROM can have drastic consequences, including turning working customer phones into bricks. Those familiar with homebrew ROMs can attest to that, as something as simple as a corrupt download can have dire results.
This entire process can take a fair bit of time, especially if the original OS update was significant. The more things have changed, the more add-on bits get broken and must be fixed. This customization is what has contributed to Android's astounding adoption rate, but it comes with a significant toll to the update process.
Remember that each company that makes Android phones typically makes multiple models; it is why Android has grown so phenomenally. Unfortunately, multiple models at the OEM level turns each Android update into a major development effort. This effort increases exponentially with the need to specialize those updates for each carrier the OEM must support. Every layer of update development adds costs to the OEM, and more significantly to the customer, more time.
I'm not defending the OEMs nor the carriers, just pointing out the system is complicated and time-consuming. Google doesn't help matters either, with its insistence on carrying its own phone (Nexus One and now the Nexus S), for the sole purpose of having one handset that gets updates first (and easiest). It is competing with all of its partners, rather than stepping in and doing something to help smooth out the whole process.
It is time for Google to take the Apple approach with the iPhone, and take control of the OS back from the OEMs and carriers. They won't necessarily like it, but Google will come out on top in the end if Android users get every update in a reasonable amount of time. That may require reducing the level of customization open to handset makers and carriers, but so be it.