Why Windows 9x/Me was a fundamentally unstable operating system?
The advent of modern Windows systems starting from NT made us forget what software used to be. We used horrible computers built from available hardware. Random freezes once in a while, blue screens of death... Let's dive into it.
Legacy when released
Windows 9x was a hybrid system built on top of DOS. This means that the system inherits some quirks and peculiar properties of its ancestor.
Quick dive into the world of DOS

Memory Management - weak memory isolation between software and systems
A DOS machine would manage its random access memory differently from what we do now. By default, a x86 CPU starts in 16-bit mode. In this mode, it is only possible to access the first megabyte of memory, as this is maximum you can address using 16 bits.
DOS would only use first 640 KB of RAM. The remaining 480 KB was usable thanks to driver called HIMEM.SYS. This driver enabled a memory window and programmers could access memory above 1MB by setting the window pointer to memory above the first megabyte.
This may seem unusual, but was a necessary tradeoff to keep compatibility with DOS while running Windows. We used horribly cheap hardware, which used to run DOS, and Windows was designed with compatibility in mind, which meant that all programs and applications designed to run with DOS, must run on Windows.
Drivers working on three different layers

As Windows emerged, device drivers used to talk to each other on three different, non-cooperating layers. There were DOS drivers and Windows drivers. All of these driver models must be supported.
With the advent of Windows, a new driver model was proposed and programmers should develop their software for devices using the new model only. This sounds well on paper, but in practice, horrible hardware designed during the glorious days of DOS was occupying shops and homes of thousands of people. No or very few businesses would develop new software for legacy hardware, so the users would use old drivers, as there was no choice.
If you put lots of these devices into one machine, you could run into strange problems: random freezes, restarts, cryptic error messages... These problems could be due to unusual hardware configuration. I can remember that scanners would require the user to manually set IRQ for the device using jumpers on circuit boards, and they would have a dedicated ISA slot for them. I still try to run hardware compatibility wizard for Windows 98. I remmember it, I know I would not dream of it.
Windows 95 - a layer on top of it
When Windows 95 booted, it would first boot DOS, then Windows loading program took over the booting process. This is very nicely described by Raymond Chen on his blog (todo: insert link here). Windows would allocate memory for opened files, and then copy file descriptors to its own data structures, which in slang of Windows developers was called "Sucking brains out of DOS". Dead flesh of DOS would always stay in memory...
A DOS program would normally run in real mode. This mode allows random access to any piece of memory you wish. When more than one program would run like this, any tiny memory violation could possibly write to another process memory, causing changes in the other process' memory.
From DOS point of view, you would always be running one program called KRNL386.EXE. This is what enabled protected mode. And this is what lead to the famous Protection error.
No virtual machines (.NET/Java) or memory management

Programmers were real men back then and used malloc responsively. Who am I trying to deceive? A programmer who forgot to free memory after malloc could quit their program and the memory was allocated there until the machine was restarted, or Windows crashed. Each time you wrote new() in your C/C++ code, you would have to remember to free the memory afterwise. That is why the system was becoming more sluggish and the amount of free memory would shrink. That is why it was recommended to re-start the system once in a while, which in practice meant no more than 24 hours on single boot. A famous fail durin the official presentation shows this: (todo: insert youtube link). A computer with Windows 98 in this case would be running for long hours with multiple devices plugged in, which finally results in a blue screen of death.
Today, we use operating systems which not only clean up after processes, but many processes, programs and systems run in virtual machines (.NET/Java/KVM/WebAssembly).
The Big Short

When any of these potential problems occur, the system becomes unstable. A freeze, protection error or bugcheck is inevitable.
The last OS based on 9x kernel was Windows Me. What is interesting, is that the cost of investment and work put in the project was by no means proportional to what could be made out of the software. While nowadays we do complain a lot on computers we use, we made a giant leap from the days where random restarts and freezes were something you just had to live with.
It is worth while to remind oneself how horrible the software used to be, before the times of Linux, Windows NT or modern Mac OS (Yes, versions up to 9 had similar problems). How hopeless it was to invest in DOS based operating systems became obvious with advent of multicore microprocessors.