> Why can't Windows and Android provide such a feature?
Windows does.
Android "can't" because the OS is a partition image with libraries not intended to be updated piecemeal, not a collection of loosely related external projects like Linux is.
Desktop Linux doesn't actually do that unless you're trying to use a rolling release distribution. The way stable distributions work is that the packages largely remain the same for a given major version throughout its lifespan, but individual packages can still receive security updates.
I've had "stable" distributions fall over upgrading between their major versions.
But you missed the point that Android's system image is immutable and updates are atomic. A user can't screw it up. This is not an insignificant feature, and it's something you also get with something like Fedora Silverblue. Which then also doesn't let you pick and choose what updates to get.
Major version upgrades occasionally break things because they're a new feature release but are then trying to migrate configuration from the existing system. But the same thing happens with "atomic" upgrades if you're trying to migrate existing configuration, because the bug is really in the migration system that didn't properly handle that configuration variance, not because the packages aren't upgraded atomically. Which is why phones sometimes do break on major version upgrades for the same reason.
Piecemeal updates are also absolute hell to support - they rapidly lead to an untestable combinatorial explosion of possible software loadouts. Even Ubuntu doesn't officially support installing packages from a mixture of point releases (e.g. installing Ubuntu 24.10 packages on the 24.04 LTS); it might be technically possible, but if anything breaks, you get to keep the pieces.
Windows does.
Android "can't" because the OS is a partition image with libraries not intended to be updated piecemeal, not a collection of loosely related external projects like Linux is.