Meni's answer is probably correct, but describes a very far future, in my opinion.
In the more near future, I believe we'll see fully-validating nodes that do not keep the entire block chain around. The current reference client implementation uses blockchain + transaction database for validation, which cannot easily support pruning. I'm working on modifying the validation code to use a separate database of just the unspent outputs instead, which is much more efficient and only requires a few hundred MB of storage, in addition to the blocks it wants to keep around.
I'm sure this will open possibilities, but somewhat further ahead, I believe this will lead to a separation between validation nodes and archive nodes. The former relay and can be queried for their memory pool, and check whether transactions are valid, but they cannot serve old transactions or blocks, and hence cannot be used to bootstrap a new node from. For these purposes, one will connect to an archive node (this could be via the P2P protocol, but may as well be HTTP or BitTorrent).
Disclaimer: these are my views/opinions, and may not reflect those of other (core) developers.