'm not completely sure, from a quick look at the list of interface you have found it seems that all the problem that we have are coming from our attempt at using IDL for interfaces which are not defined in IDL in the SDK
Pretty much, yes. But then again, using widl saves us some boilerplate code. IMHO it has advantages keeping it as idl, although we would need workarounds to keep it working.
Moving the files from .idl to .h is IMHO quite a bit of effort. Compare that to approach 2 where I made a POC here: https://gitlab.winehq.org/DarkShadow44/wine/-/commits/widl_uuid2
Although, for both approaches I'm kinda worried that such changes may break downstream projects like mingw. After all, I don't know if their headers break with that change as well. Is that a consideration?