On the other side, the work to do it would be considerable, as each room is assigned a bucket level in ARROW, so they would have to rewrite the system to do room assignments and bucket assignments independently.
That is simply not true. Roomettes are not preassigned bucket levels in Arrow.
All rooms actually default to the "S" bucket if they're unsold (if you ever happen to look at a manifest, you'd note this). When sold, they go at the prevailing bucket.
The main reason for not making it easy for people to pick their own rooms is as Alan said. You don't want someone booking CHI-DEN in room 1, and someone booking DEN-EMY in room 2, and therefore there not being a room CHI-EMY for someone that wants a through trip.
It's different from the airlines because virtually everyone is getting on and off at the same place. A few people may take a "direct" flight with a stop and no change of equipment, but even then, getting up after being stuck in your seat for a two-hour flight, and taking a different seat for the second half of your trip is a lot different from having to gather all of your stuff out of your room, and moving it down the hall (or to a different car) because someone has that room for the next part of the journey.
Making people move to different rooms a couple of times in their trip would likely turn them off of rail travel.
As Alan noted, it still isn't perfect. If a few people book "short" trips, and get assigned rooms accordingly, and then a couple of the "shorts" cancel, then you may still wind up with disjointed room availability.