Windows unterstützt UTF-16 schon mindestens seit win32s. Und man kann die Funktionen auch direkt aufrufen (_wfopen etc.). D.h. man kann auch einfach kleine Wrapper schreiben, die utf-8 in UTF-16 wandeln, und die entsprechenden Funktionen dann umbiegen.
Für Windows gibt es allerdings momentan noch ein anderes Problem: die ganzen fopenat(), statat() etc. Funktionen sind dort nicht verfügbar. Die müsste man erst nachbilden.