Originally HTTP was for simply transferring a single document. The connection was closed, because the request was complete. There was no need for the connection to remain open. These days we have a whole mess of web applications, and we have entire layers of complexity built up to keep a persistent state despite closing and reopening connections. It really is ridiculous. We have entire applications built around a protocol that was designed for something quite different, all because of issues with the end user. (We didn't want to make them download anything, make them click more than they had to, confuse them, etc.)
I don't think it will be too much longer before we clean house a bit and remove all of these layers and get down to business with what our applications are trying to accomplish. I am speaking of not just the protocol used, but the layers of abstraction for execution as well.
At the very least, most HTTP connections are persistent to an extent. There is a keep-alive parameter so that many requests from the same server can be processed all in one TCP connection. Not all servers have it enabled, but many do, and it does keep things moving better than without it.