I’m not sure if it’s ‘true’ intrinsic complexity: one can argue that the complexity comes from the kernel having so many different modes. (E.g. a ‘simple’ single-threaded cooperative kernel might not have this complexity.)
But it definitely is ‘useful’ complexity...
just adding interrupts and multiple cores is enough to break that kind of "simplicity".
It is perhaps because it needs to do all those things because it's one thing used for many different things, providing detection for it's own context.
Much of the complexity in many cases could be alleviated by different functions depending on what context it is called from.