The biggest problems were DAO (database) and a few COM controls that were not available in x64.
You can pick one or the otherfor Windows too, so don't ask me why it's done that way. It was originally so you could compile for both the new hotness Unicode, and the old compatible ASCII.
Or, they could have implemented a UTF-8 code page for Win32 as soon as it was available and then most software could just use byte strings.
But then Large Address Aware (4GB limit) changes everything, and you can't do that anymore. In order for a program to be Large Address Aware, you need to not try to do things like check high bits of pointers, then every single library and DLL you use also needs to do the same.