Linux OS/HW VM cooperation
Why?  Because this design works pretty well and meets the requirements, and most alternative don't or would be more expensive or slower.  In particular, this division of responsibilities lets the system implement a suitable page replacement policy for virtual pages in a way that is relatively efficient.

When asking a "why is it done this way?", it's often helpful to try to imagine some concrete alternative way of doing it, and then analyze the advantages and disadvantages of the current method compared to that alternative.  You haven't listed a specific alternative, so it's hard to be a lot more specific.  But for instance if you tried to do it all in software (so the OS has all responsibility), without the hardware managing the accessed or dirty bits, that would be very difficult: the only methods I can think of for doing that are clunky and will cause many context switches and thus will slow down the system a lot.