There are some services that implement streaming like described previously: User input is uploaded to the server, rendered frames and sound-data is downloaded to the browser. This reduces processing load on your local machine, but you need a really good internet connection for this to be fun.
The way the company I work for handles it works like this: You download a little bit of data, say the assets and code for the start menu. Input-handling, processing and rendering and takes place in your browser via HTML5 canvas (or a native plugin for older browsers) and while you are busy setting up your profile, clicking start etc the assets for the first room in the first level are being downloaded and so on. The next time you play, the data is already in your browser-cache.
It's up to the game-designer to only download as much data as you need (eg: only when the player approaches a corner do you download the mesh-data for whatever is behind it, only when the player picks up the plasma-gun do you download the sound-files for plasma shots).
I know, strictly speaking this isn't 'streaming' but it's the same result: You don't download everything at once.
In regards to the technical aspect, there's nothing magical going on. Game-assets are being stored in shared collections on Amazon, accessed via their SHA1-hash and we use AJAX requests to get them.
The only data that is constantly being send back and forth is for multiplayer games. (We're using websockets)