How would the Bitcoin protocol be impacted if nodes only stored the blocks they cared about?
There is proof of concept work in progress right now to solve this problem.  Basically by creating hub nodes capable of handling many thousands of connections.  These hub nodes are in fact a proxy backed by a real satoshi bitcoin daemon.  This will relieve standard bitcoin nodes from a lot of the connections being used up by these 'selfish' nodes and allow them to continue operating as do now.  Mining pools will have a strong incentive to run hub nodes as it will speed up propogation of their generated blocks as well as ensure they have the best chance of getting new blocks as quickly as possible.