Why does Bitcoin store all transaction inputs and outputs, instead of just an "account/balance" ledger? From what I can tell, the Ethereum blockchain just stores accounts and balances - why did the original Bitcoin developers choose the method of storing all transactions for validation instead of just account balances? It seems like that would reduce blockchain size on disk quite a bit...
In order to be sure that an address balance is correct, you need to check that all the transactions on that address are valid.  So in order to generate a list of addresses and balances that you trust, you must first download and verify the entire block chain.

Actually, the way Bitcoin works, what you actually need is a list of unspent transaction outputs (UTXOs).  When you create a new transaction to spend coins, you don't just debit an address; you have to reference one or more specific outputs from previous transactions that you are spending.  Those previous outputs then become unusable, so that you can't spend them again.

Bitcoin Core does actually generate an indexed database of all UTXOs, and refers to it when checking transactions for validity (since this is much faster than searching back through the block chain directly).  This is the closest analogy to the "ledger" you proposed.  

Once you've done this, you could delete the block chain itself and just keep the UTXO database; that is basically what the -prune option does (see How can I run bitcoind in pruning mode?).  However, remember that Bitcoin is a peer-to-peer system.  So you keep the block chain so that new users can download it from you.