There's a big part of it that is based on the incorrect assumption that if someone is in the office 9-5, they are working 9-5. That and the ability to directly monitor people, interrupt them whenever you want to, and so on.<p>The other part of it is slightly more understandable, which is to enable you to collaborate better with the other members of the team. Developers are often more likely to turn to someone they are sat near and bounce an idea off them than they are to write a question in an email, IM or chat room.
I think your analogy is incorrect. When you get your oil changed, you are the customer and the person changing your oil does get monitored by his boss (manager), to make sure he does his job.<p>As a developer, you are not the customer, the people using your code are the customers. In the end its all about accountability and responsibility. If you take ownership of your code/issues, a good manager will see that and stop micromanaging.
I think one of the main point is reactivity, or response time. If something goes wrong, you can simply say "Hey Matthew something's not right on the production server, can you come over here?" rather than trying to reach you by IM "Hey Mat? are you there? Plz answer quickly".<p>I am not sure it is always justified, but I think most people feels <i>safer</i> to have people close if something goes wrong.