[0] https://onlineunicodetools.com/spoof-unicode-text?input=Noth...
More likely: It's not cargo-cult cultural heritage and stuff is still that bad in some places.
As for hashing bruteforce attacks: no problem, do an initial hashing round on the client before even sending it to the backend.
However, for passwords, you should allow any sequence of bytes (as much as the system can support it, which it should allow any sequence since they should be hashed anyways), and the maximum length should be sufficiently long (and don't truncate passwords either).
Sometimes it’s just being able to be standards compliant in future:
POSIX stipulates that a dot should separate the user with the group (so jan.harasym is technically an illegal unix user name, and as such might break non-gnu `chown`)
If your username is for a comprehensive suite like Google’s gsuite then having an “@“ or “%” would make your email address invalid.
There could be encoding issues too, but I think the majority of new systems use UTF-8.
I haven’t seen a _real_ encoding issue in about 4 years.
For passwords it's just bad practice. Allow everything, and allow it to be very long.