Python 2.x actually supports unicode better than most programming languages. But as in other languages you have to think to get it done correctly, and since ArcGIS is developed in US, and non-ascii characters is something strange there, the developers are not used to thinking about this problem and they get it wrong most of the time.
The correct way to program python, is to use unicode strings instead of standard strings all the time. (To do that just put a u in from of the string literals). Then encode the strings to UTF-8, latin-1 or whatever just before writing to somehing that doesn't understand unicode, and decode immediatly when reading from something that doesn't provide unicode (like text files).
In Python 3 this is enforced, since standard strings are now unicode, and if you want something else (like byte strings) you must say so explicitly. But most of the unicode functionality is already in place in Python 2.