char fallback_prefix[] = "Wine.Fallback.";
Is there a good reason not to use the path as-is in this case? Windows apps don't see the value of WM_CLASS, after all.
I agree that using the full path rather than the basename is the correct approach, although you haven't made it obvious why. In my testing, the Windows taskbar would distinguish between executable files with the same name in a different directory.
Can the AppUserModelID be changed after a window is first shown? If so, we'll want a mechanism to notify the user driver of changes.