I can definitely understand them wanting to drop custom C++ extensions, but it's a shame they can't figure out how to provide a nice development experience for their newer UI platforms. If only .NET actually works reasonably well with it (and there's a huge managed<->native overhead) maybe it should have just been WPF 2.0?
Not that I would use WinUI anyway, microsoft cannot be trusted with UI frameworks anymore.
The custom C++ extensions argument is a very bad lame excuse, it isn't as if WinRT was ever going to be cross platform, or not every single C and C++ compiler used in production (not toy compilers) doesn't have their own set of extensions anyway.
I also don't consider anything related to WinUI/UWP trustworthy for production development, and I used to advocate for it.
Stuff like how .NET Native, C++/CX => C++/WinRT transition, UWP => WinUI were managed, is how they lost most of us that really liked WinRT.
I really, really, am baffled at how difficult it seems to have a GUI builder tool that outputs a description of the UI that a program can just load (or a compiler transform into a structure inside the program) as objects the program can use, handling events and pushing presentation information into it.
That was pretty much what VB did, with immense success.
The problem is that you need some form of RTTI that allows object serialization. This is basically what Delphi does: the forms, controls, etc you are editing are not fake stand-ins, they are the class instances you are working with. The object inspector shows you the actual instance properties as defined in code and you are editing live objects - the only difference is that those objects have a "design mode" flag so they can ignore any user input. When you save a form, it serializes the objects on disk. That serialization data is stored on the executable and when you run the program, the form is deserialized and the object instances are what were stored.
There is almost no UI-specific functionality there, the same functionality can be used to serialize any type of object and you can even implement your own serialization logic for your objects. The language's RTII allows for declaring properties (think like C# properties, though really C# properties were inspired by Delphi properties as the latter had them since the original Delphi 1.0 for Windows 3.1) as part of a class and has support for metaclasses (classes are instances themselves of a metaclass that describes the class), including virtual constructors (since classes are instances they have their own VMT) which allows for constructing class instances on the fly by passing a class type in a function.
The thing is, C++ does not have this sort of functionality. You can implement your own RTTI, as several projects do (many game engines do that for example), but it is often clunky (e.g. relies on macros, duplicating info, manual registration and/or external tools that parse the code and generate the RTTI boilerplate).
C++ Builder did it because it extended C++ to add that functionality in a way that is ABI compatible with Delphi - and is how it can use VCL (which is written in Delphi).
It was easy to do in Win95 through to Win2k because the interface was consistent throughout. Then they started changing the interface guidelines, and toolkit, for every major release of windows; and sometimes several times during the life of a major release.
This is also baffling. A button, a text input, a checkbox, a drop list, a combo - they all have a "default" look in every Windows version since 2.0 (1 didn't have the drop list, IIRC). It shouldn't be difficult to make an abstract description of a dialog box look at home with a new version of the OS and, yet, digging through Windows 10's built-in apps you sometimes find things that you recognize as skinned versions of Windows NT 4 dialogs. That they look like NT 4 dialogs with the Windows 7 skin applied is disconcerting, at best.
The Office team used to pioneer (hard-code) the look and feel for the UI, and then the Windows team goes and implement the look and feel system wide in a generic way. Then somewhere along the way, the Windows team decided to hard-code the look and feel that you could now do an archeological dig through decades of UI.
All of that is fair, it's not like C++/CX was all that different from needing to use Obj-C on macOS. I'm just saying I can accept their reasoning. Using only standard C++ is better in a vacuum, but only if nothing is lost in the transition.
May I ask what your plan is regarding UI at this moment? I've given up and gone the web route (with Avalonia on my pocket in case my sanity gets dangerously low).
Similar plan, in 2019 I went back going to distributed systems/Web, where Microsoft technologies are one among many others that get used on a polyglot agency, the usual "A jack of all trades is a master of none, but often times better than a master of one.".
For doing Windows stuff, I would rather advocate for Win32, Forms/WPF.
In regards to C++ stuff, either C++ Builder if it fits the budget, or Qt.
It is quite tragic that even MFC has a better development story than WinUI/C++.
They decided to rewrite Xamarin.Forms, it uses WinUI on Windows, Catalyst on macOS, and VS4Mac is now officially dead and one has to use VSCode instead, and they are all into this Blazor Hybrid as well, with Web views.
It is baffling to watch community calls and have them talk about rewrites and dropped tooling features as if it wasn't a big deal, being asked for the n-th time since Windows 8.
Not that I would use WinUI anyway, microsoft cannot be trusted with UI frameworks anymore.