So this means that the missing WINVER macro is actually a problem with CygWin/MinGW
Problem is not the correct word. MinGW (or gcc in general) is a compiler that is first and for all designed for compatibility and standard compliance. Only after this, it is designed for things like optimisations or system-dependent features.
It has to work, and it has to be right. Everything else is second line.
The default value of WINVER chosen by MinGW is a safe value that guarantees it works everywhere. If you accidentially use something that would prevent your program from running on older, then you will know. It will not compile without errors and mysteriously crash later (or fail due to a missing DLL), but it will tell you
before things get nasty on the target PC.
That way, the developer can decide what to do in time (either change minimum requirements or use different functions).
This is a very good strategy, it saves you a lot of support work and headaches later.
If you're positive about not wanting to support anything older than Windows XP, you can always
-DWINVER=0x501 or anything in your project settings, it is neither obscure nor hidden, nor anything of that kind, and it works just fine. It will just not work on an older OS, but you
know it won't.
Who uses win95 anyways?
Where I live, almost nobody uses Windows 95/98/ME any more (although a few people exist who still do). It may be the same where you live.
However, you have to take into account that the majority of people that live on this planet are not exactly as lucky as you and me.
In fact, for far more than two thirds of this planet's population, a Pentium III with Windows 98 is something so surreal that they would not even think about ever owning one. Therefore, you should not assume that
nobody uses Windows 9x any more.