Nexus One is no longer being sold, in the US at least.
In general you can upgrade most any Android device to a newer OS, but you do have to do some hacking. Sometimes a lot of it, sometimes less. In many cases it is fortunately quite easy. But the phone hardware makers seem to be wanting to make it harder (see Motorola with their new hardware in the Droid X for disabling custom ROMs).
So the Android market is unfortunately somewhat fragmented. There are plusses and minuses to the Android approach in general. Sadly you do need to do some hacking for most Android phones to upgrade to a version of the OS not yet officially supported by your carrier. This is a carrier problem, not a fundamental OS or hardware limitation. The carriers want control, and they also want to differentiate their devices with custom UIs (if only they were optional!), and these UIs take time and dev money to upgrade for newer OS versions, so either there is a delay while the UI (e.g. "Sense" or "Motoblur") is updated, OR they choose not to bother spending money on the update for a really old device. In either case it's annoying and unnecessary restriction.
I'm honestly impressed Apple has managed to maintain upgradeability for their phones to the latest "iOS" versions as long as they have, but that's because they have complete control over the hardware and a very limited model line-up with minimal hardware differentiation. In fact it's a mirror of the classic Windows/Mac difference, with millions of different Windows PC models, and usually 5 or 10 (largely similar) ones on the Mac side. But if you want anything that is not standard on the Mac/iPhone side, you're out of luck. No physical keyboards, no alternate networks, etc.
Which leads me into Deo's point (that I was hoping someone would mention, or I was going to
), which is that in some cases it really is a hardware limitation, which is no different than how things are in the PC (or Mac) world. Newer versions of OS X for example have minimum hardware requirements, and won't run on older systems. In some cases (e.g. older CPU architectures no longer supported), you actually physically can not install the OS onto the older system as it doesn't include the right drivers. Maybe there is a way to get it to run with hacks, I don't know, but Apple makes it very, very hard.
In the case of Windows you can generally ignore the minimum specifications and install anyway, e.g. onto an old system with 128MB of RAM. If it works to install it, it probably works to run it, it just may be really, really, really slow. But it's your choice to do it. Since Windows has been based around standard x86 architecture for decades, it's not really a matter of a CPU not being supported. Maybe peripherals (e.g. audio drivers, etc.) won't be available for the newer OS, but the core system functions.
Anyway, what's going on in the Android space is that the hardware is on an accelerated development curve, and that's what separates it from the PC world and makes it seem so "wrong" to people (people used to Windows/Linux, or who bought in to the underlying promise of a Linux-based smartphone OS) that a device only a year or two old can't get the latest upgrade. The thing is we've more than doubled our CPU speed and memory in that time, and that's unprecedented in the desktop world. Think about any time in the past when you would have doubled CPU speed in a 1-2 year period (or less). Last year's Droid was the hot new phone at 600Mhz, and with 256MB RAM and 512MB ROM. The Droid 2, coming out less than 12 months later, has a 1Ghz CPU, and other phones (like the Samsung Epic I'm planning to get) have 1GB of memory and rising. Motorola is apparently aiming to have a 2Ghz
phone by end of year! The speed of hardware upgrade is staggering, and to take advantage of the newer stuff, you inevitably leave the older stuff behind in certain ways. Maintaining backward compatibility is not always hard, but sometimes it's necessary.
On top of all this is the issue of the carriers and their lock-in desires, which I mentioned above. So no matter how much some of us might want it to be, the fact is just because Android is based on Linux doesn't mean it gives you that level of real freedom. You're still at the mercy of your carrier to some degree, even if you root your phone.
For me Anroid is still a big improvement over anything else out there, but I do wish the carriers and hardware vendors allowed a little bit more cohesion. If they weren't so concerned about lock-in and differentiating their devices *in software* (or if they at least made these things optional), everything would be a lot nicer in the smart phone world.