It would be interesting to know how, in practice, these FILE pointers come to life. In my experience they are generally obtained via fopen.
I think that experience can't be generalized. I personally guess that in most cases, the FILE* being passed across CRT boundaries is stdout.
If that is broadly true, then a middle-ground may be for Python to expose something like Py_fopen, Py_fclose and a PyFILE opaque "handle". API elements which currently take a FILE * could be exposed using a PyFILE * in the ABI. People who didn't care about this level of portability could continue to use the non-ABI FILE * functions, but people who do could use Py_fopen/Py_fclose in place of fopen/fclose but otherwise work as now.
I don't think this would solve the problem; see above. Regards, Martin