Many web based user authentication systems don't allow usernames that contain characters other than letters, numbers and underscores.
Could there be a technical reason for that?
A well-designed system doesn't necessarily need to prevent any special characters in usernames.
That said, the reason underscores have traditionally been accepted, is that underscore is typically treated as a "word" character, along with letters and numbers. It is usually the only other character given this distinction. This is true in regular expressions, and even at a base level in most operating systems (type an underscore in a word and double click the letters. The selection will extend past the underscore. Now try the same with a dash, it most likely will not.)