Pues en la lista de correo de FreePascal (no es que no me fiara, sino que en este caso busqué una segunda opinión
) me han dado una solución similar. Lo que me han dicho también es que WIDESTRING no usa una codificación UTF-16 sino que depende de la plataforma (por ejemplo, en Win9x parece que utiliza UCS-2), de ahí que existan funciones como la UTF8Encode por ejemplo.
Al final creo que voy a duplicar las funciones que permiten el uso de UNICODE, de forma que haya dos: una para ANSISTRING/STRING y otra para WIDESTRING. Así me evito quebraderos de cabeza y me quedará resultón.