One, free with contract is a powerful incentive, especially for people who really just want to use it and don't care about the technical details. I wouldn't be surprised if a significant number of iPhones never have their software updated. Macrumors posters are not very representative of the broader user base.
Here in Japan, the 3G was free with a contract last year, and if I'm not mistaken I believe the iPhone 4 may have been as well for a short time. Thing is, everytime you plug it in to load apps, it tells you the software is outdated, so I'd wager that many people do blindly update, as I once did, leaving me with this terrible brick of junk.
iOS 5 runs just fine on the 3GS. Virtually every new feature in iOS 5 runs just fine on the 3GS. In fact a lot of stuff runs fastereg Safari is noticeably faster.
The big problem with your argument is the 3GS was a huge step up from the first couple generations of iPhone. The original iPhone and 3G were pretty anemic in ram and processor. The 3GS was a night and day difference.
I think you are underestimating the speed improvements on the 3GS. It is a significant speed improvement. And first reports are iOS 5 runs great on the 3GS.
Right, maybe iOS5 works ok, but what about the updates after that? What about the annual-hardware-update-unknowing people that buy the phone next May or June, when it's iOS 5.X.X and iOS6 is around the corner? And what about the updates after that?
The 3GS *may* run iOS5 *ok*, but it's gonna get owned by future updates that would still fall during the phone's life cycle to a customer who buys it and expects 1-2 years of use out of it.
Like someone else said, the value proposition of paying a whopping $350 for a phone that's 2 years old and already horribly outdated is just plain terrible. Unfortunately though, there are a lot of customers who are going to be misguided and buy this phone, expecting to get 2 years of reliable service out of it. Apple's past history with iOS shows that to simply not be the case. Once a phone hits 2 years old, Apple basically stops supporting it, and the 3GS is two years old already today. No way people who buy it are going to be able to run iOS6 and even iOS7 (think of people who buy it next year right before iOS6 comes out, they will be expecting it to run on iOS6 right after they buy it, and iOS7 a year after that when their phone is just over a year old to them).
If there's one thing this pile of crap 3G has taught me, it's buy the newest phone there is and don't update it.