I think the key difference here is that you don't expect the tokens in the token bucket to all be used up.
So imagine you want to limit the rate on your network, Bob is downloading from limewire and eating all the available bandwidth. Andy is complaining because his webpages are slow. Both computers contend for the same bandwidth and it leads to dropped packets and timeouts.
You add two leaky buckets one for each user at 50% max flow. Now they both have half the bandwidth each. The computers adjust to the steady rate and no longer contend. Apps work well but at a slower rate.
But! they are both displeased. Downloads and webpages now take twice as long to load! "I understand that andy needs to use the bandwidth too", say Bob "but once my file downloads I won't need the bandwidth any more and Andy can have it all!"
You change the leaky buckets to token buckets, with the refill rate set at 50% of the total bandwidth . Now if Bob downloads a file it eats up all the tokens and he has a fast download. But.. if he downloads 24/7 the tokens are used up and he'll be limited to the slow 50% download the same as a leaky bucket
Andy's webpages load fast, they never use all the tokens because 90% of the time he is reading the webpage not downloading it.
Charley joins the network. He plays Counter Strike beta 5! although the volume is low the important thing is that its not interrupted.
You add a leaky bucket set at 90% of the traffic put both Andy and Bobs Token buckets as feeds into it. Even if they both max out their connections there is always 10% left for Charley
When they are all using the network at the same time Bob gets a steady 45%, Charley gets a steady 10% and Andy spikes to 45% on load.
Everyone is happy.
With no limiting, Bob would have 99% because he's got multiple aggressive connections, Andy gets slow webpages and Charley shouts "OMG Lag!" every few minutes.
Token Buckets sound superior, why not always use them?
They are, but only if you have the over head to allow the burst traffic in the first place. In our home network example the WAN link acts as a hard limit to the total bandwidth. In effect its a leaky bucket.
If you put in a Token Bucket with too high a refill rate, it won't do anything at all. If you put in too many tokens It won't do anything either.
Your job as the network admin is to make sure that hard bucket never leaks. You build a tree of software buckets of various kinds all feeding into each other to try and make sure that all the applications get nice steady fixed rate streams without having any spare bandwidth left over.
What about spare bandwith?
leaky and token buckets aren't the only way to do things. If you recognise there is free bandwidth it can be apportioned out according to various rules.