Bitcoin-QT with standard settings will keep 100 unused addresses in your wallet at all times. The goal is that backups will be future proof to some extent.
A key pool allows to create backups in bigger intervals
Every time you create a transaction, the remainder of the input balance is sent to a new address in your own wallet. If addresses were generated only then, you would have to create a new backup after each transaction, or be at risk to lose any funds associated with that new address if your wallet got lost. By keeping a pool of unused addresses in store, your backup will be sufficient for the next 100 transactions before you will be at risk of losing something.
To create a bigger key pool, with e.g. 10000 keys, the client can be started with the parameter
I don't have intimate knowledge of either multibit or electrum, but suspect that they keep a key pool for the exact same reason.
One vs. many addresses
Using many addresses, i.e. a new address for each transaction,
- increases your privacy by making it harder to determine that your different transactions belong to the same person.
- obfuscate which part of your transaction went to the recipient and which was the change.
- create plausible deniability as sending funds to yourself looks the same as sending to another user.
- By giving out a new address for each incoming payment, it is easier associate payments to specific senders. Say, you go out with a three business partners and each ends up owing you 0.10 BTC. How would you know who paid already, if you only received two payments to the same address?
Using only one address
- allows your backup to last forever
- reduces the overhead if people send funds to you more than once.
- Your privacy, and the privacy of your business partners might be reduced.