The client simplifies and automates your wallet. Beyond curiosity, you really don't want to have to deal with the nuts and bolts.
When you send coins, you aren't sending from your balance, and you aren't sending from your addresses, you are sending from previous transactions
that have been sent to keys in your wallet. That part is critical, because a transaction can only be redeemed once, and always in full.
Say, you have received three transactions for 1.3, 4.6 and 0.5 BTC, for a total of 6.4 BTC. You want to send 6.1 BTC to someone. The client will create a transaction that redeems all three inputs, because it needs all three to reach the desired spend amount. But that is 6.4 BTC, not 6.1 BTC, so it creates a new key and address to accept the "change", and finishes the transaction with two outputs, one for 6.1 BTC to the address you wanted to send to, and one of 0.3 BTC back to your wallet via the newly generated change address.
That is why spending coins can (and usually does) generate new addresses in your address book. The GUI doesn't really show how your balance is distributed amongst your addresses, but I think you can get it on the command line, or by punching the addresses into the block explorer