Is there any reason why every certain number of blocks, that everyone's balance could not just be calculated and written as a huge new "genesis block" heap that simply equates Bitcoin addresses with their balances, and then all the detail from all prior blocks could be truncated?
Yes, there is a reason that is not done in the standard clients, and running balance sheets have been proposed, but it's not neccessary in order to keep the local blockchain footprint down. The blockchain can be 'pruned' of old transaction records that have been already referenced (spent) in "lightweight" clients such as cell phones, or even full clients once set up. There will likely always be a complete copy of the blockchain available somewhere on the Internet, but only 'paranoid' clients need the entire thing and then only upon initial startup. Once they have verified the entire blockchain, even the most paranoid client can prune years of records off the chain and need only keep the 80 byte long headers.
The way I understand it, you need the whole block chain not just to be a generator, but to independently verify the validity of your bitcoins cryptographically, and that can be tedious if a cell phone in 2030 must trace each cent through countless micropayments back to the originating block.
You understand it incorrectly. Don't take this personally, as it's a very complicated system, and takes a while for even the geekiest among us to wrap their heads around. I was here for weeks before I really understood it.
And a 'lightweight' client can verify transactions independently without the full chain, but it's more than possible to verify transactions without a local copy of the chain at all if your client is connected to the Internet at the time. There is a number of ways that this can be done, but the current Android client functions as a frontend to a remote bitcoind running on a server. This bitcoind server is functioning as a "trusted node", in this case because both the server and client are owned by the same user; but it is reasonable that "trusted nodes" will be a common thing in a Bitcoin future, functioning as a type of bank and/or credit card company as a service. The trusted nodes keep the blockchain, and verify all user transactions.
Example, after a million blocks, block 1000001 could be a block that replaces all blocks 2 thru 1000000, so one may only need a block chain of 1 -> 1000001 -> 1000002 etc... until two million: 1 -> 1000001 -> 2000001 -> 2000002 etc...
Feel free to write such a client. If there are technical issues with such a shortcut, I'm sure that you will figure it out.
Not only would this save space for people not wanting to dedicate an ever-increasing amount of resources at a difficult-to-sustain rate, but it would also reduce the computational resources needed to validate balances, which would probably grow in an O(n^2) manner relative to the block chain itself.
The resources of verification do not grow exponentially, or even linerily, with the size of the blockchain.
If this is not sensible or beneficial due to my misunderstanding of the way it works, I'd welcome being corrected.
It might be both, but it's not immediately neccessary to be able to compact the blockchain for any reason; and provisions exist in the protocol to be able to prune the blockchain to significant degrees. This system is still young, and alternative clients will start to pop up with other ways of doing things when the time is right.