I had always assumed they did this for financial reasons. The hash won't be sent along as part of the referrer header, so the search query won't be available to 3rd party analytics. The only way to track search queries is to use Google's own analytics, which can correlate queries to traffic since it's watching both ends of the handoff. The technical explanation discussed in this thread is certainly valid. But it only…
The why is also addressed by the comments (IE only got support for pushState after the solution was already built).
Besides, for a long time, Google added intermediate pages when you clicked through a search result, adding the appropriate referrers right back in.
I don't think you need to attribute this behaviour to malice when a simple technical explanation suffices.