A big part of the problem is just that there's basically no way to completely win. Every option will piss somebody off.
Release OSes too quickly that are too much alike? You get people complaining about there not being enough different to justify the upgrade. I remember people saying that about Windows 98 (especially compared to the last OSR version of Windows 95 with the USB add-on and IE4 for the Windows Desktop Update that could be hard to tell apart from Windows 98) at the time. Win2k to XP was criticized for just being Win2k with a Fisher Price theme. And even Vista and 7 a bit, though Vista was so poorly received they mostly escaped that fate even if 7 wasn't all that different from Vista in the end.
Release them too far apart or with too many changes, a different subset of people are upset they're too different and require too much relearning. 98 to XP perhaps, XP to Vista, 7 to 8 with its Start Screen and forced full screen metro apps might count.
Likewise with compatibility, where's the sweet spot? Too much backwards compatibility and they get criticized for "bloat" and "old code". Does the current 32-bit version of Windows 10 really need to still support running DOS and Windows 3.1 apps? Or even Windows 1.x and 2.x apps with some very minor resource tweaks? Probably not, but it can.
There's been a few attempts at an appliance computer with a somewhat minimalist OS that is never updated, and it gets left behind by technology very quickly. But then there's been other attempts at appliance computers with minimalist OSes that get updated at the whims of their creators and other people don't like that either.
But cut off too much compatibility and other people will be critical of that. 64-bit driver migration primarily with Vista was a big one, dropping NTVDM in 64-bit too even though I'd hazard to say a lot of the people complaining about it didn't use it anyway or had alternative methods to run their stuff (including the still-supported 32-bit versions of Windows until 11). Now we're seeing it with TPM 2.0 and other requirements for Windows 11.
Not to mention that at least until pretty recently, the speed of technological change meant that you couldn't always plan ahead for what would be efficient code and available APIs/services. Windows 95 had a number of compromises built in so it would run acceptably on low-end machines and maintain compatibility with DOS and a lot of other stuff. Do we really expect app developers to keep their apps running on Windows 95 and the compromises it made to run on 386s and 486s with single-digit megabytes of RAM when we have multicore, multigig RAM, multiTB disk space machines now?
Personally, I'm the kind of person that wants his OS to stay out of the way. I use a computer to use applications on it, not muck about in the OS and what it provides, so I'd prefer to be left alone. I feel like Win2k was probably the pinnacle of Windows UI design (although XP is fine too, and can be more colorful) and I really dislike the low contrast, flat color, hard to distinguish active buttons and controls from the background stuff that modern OSes in general are doing. But I also don't expect Microsoft or anybody else to maintain a single OS for decades based on a single purchase, or keep their applications running on decades old OSes that haven't been touched. Even for the ones that are "just" compiler flags every OS supported increases testing load significantly, as well as potentially code size. It sucks but sometimes progress leaves behind your favorite OSes and things. All that to say I'm agreeing with you very verbosely.