Or are they kept forever such that the chain from the Generation Block will always remain verifiable?
Reaching consensus on which old blocks should be removed is very complicated. Bitcoin, being decentralized, requires you to check for yourself and add-up all the transactions from the very beginning.
If you keep a partial version of the blockchain, how do you verify that it is consistent with the entire blockchain? If you keep a partial blockchain someone could easily broadcast to you a blockchain with incorrect values, and there would be no way for you to understand whether those transactions are valid without checking the entire blockchain for yourself.
Fortunately however, the size of the blockchain isn't really an issue if you use a Simplified Payment Verification (SPV) client such as MultiBit, as it's able to verify the integrity of the blockchain with just the block headers. This reduces drastically the size of the blockchain.
To answer your question, for bitcoin to work, old accepted blocks cannot be removed.