Unless you were an early adopter or you have a very unusual name, being able to register your regular username on a website is a rare feat. There are only so many words in the dictionary and you probably share at least part of your name with a couple hundred, if not thousand, people.
This usually leaves you with 2 options, butcher your username with numbers, underscores or some sort of affix. Or you can try one of the other dozen aliases you use for such cases and resent the jerk who took it first every time you log in. Usernames are serious.
The username estate
They're often very important for both corporate and personal branding. Just like domains names, shorter and easier to remember handles can make a difference when you're trying to reach people and get them to stick with you.
There's even a market for such names, like the story about the $50,000 Twitter username. The username in question, @N, was worth at least $50,000, but someone managed to steal it (don't worry, he got it back). A good name on a popular website is a hot commodity and, just like there are domain squatters, I'm sure there are username squatters.
The username graveyard
What's even more frustrating is that 90% of the time the account is not even active anymore. As developers, it's our responsibility to manage the username estate in our apps and we can do something about it.
First, let people change their usernames. Don't complicate things and try to update every mention to the user in every comment ever. Just let the user know the consequences of what he's about to do and change the string.
GitHub's dialog when you try to change your username
Twitter and GitHub both do it. Letting people change usernames prevents them from creating a second account while the other one rots for eternity. However, as we can see with Twitter, that doesn't completely solve the issue.
We can also allow users to claim an inactive username. There are hundreds of ways of going about it, but a safe route would be to check for activity in the last X days and email the current owner to inform them that they will lose the name if they don't do anything. I haven't seen anything like that anywhere, but I'd like to expirement with different methods someday.
A third option, that I've only seen in the computer game Diablo 3, is to generate a random number that gets appended to your username (called a battletag on battle.net, the online service used by the game). johndoe becomes johndoe#1234 (the number is only used when trying to add the other player as a friend), allowing pretty much anyone to use whatever handle they like. I'm not sure it would work on a lot of website, but it's an idea worth considering.
Unfortunately, there will always be a shortage of short or memorable usernames and for each website, there can be only one.