Another issue I see with your approach is that it doesn't seem to allow using it for static classes. You would have to export all the vtables and assemble them in the client code too, whereas with mine we can have static initializer macros directly usable.
Fwiw I chose to use WIDL_impl macros just because I wanted to declare all the classes in the same IDL while keeping the existing implemention separation. It's a minor detail and we could very well either declare classes in separate IDLs (like your example), or generate a .h for each class instead (but that would possibly make it more difficult for makedep, and for the user to connect .h and their IDL).