I don't think this would be as hard as it sounds, if the .spec files could be used to describe all of the parameters and calls to the API functions.
Well, the big problem is that .spec files are so 'passé' now :-)
Correct me if I'm wrong, but I think that most new APIs are now exported through COM objects and not 'standard' APIs (I could do a check on the current Wine DLLs, but well, a lot of stuff is using COM nowadays).
So you would need to have a way to describe all COM inputs / outputs. Then there is the matter also that Wine uses the COM objects internaly exactly like the program does.. So you cannot say 'hey, let's put converting functions in this COM vtable' as this will break when called from X86 code.
Finally, you will have the problems of 'non-trivial' argument passing (ie data which are not described by C structures). For that, you will have to rewrite the C code parsing this for each call (and thus have a emulator-specific path). This is the case for bitmaps, a lot of DirectX stuff, ... It's exactly the same issue for '...' functions.
And you will have to rewrite most of Wine's OpenGL code too :-)
So, yes, it's doable. Now is it pratical to do so and acceptable to rid a lot of Wine code with if (emulated) { .... } else { .... } ?
Lionel