Я думаю, что нить - ваш лучший вариант.
Похоже, нет способа вызвать API-интерфейс CreateFile асинхронно. Как только дескриптор файла открыт, вы можете выполнять на нем асинхронный ввод-вывод, но процесс его открытия по-прежнему является синхронным.
Вам придется самостоятельно управлять синхронизацией с потоком, поскольку только ваше приложение знает, когда ему нужен результат fopen, и в этот момент оно может блокироваться.