When possible why isn't digitalWrite and read also pinMode replaced?

There have actually been several implementations of a "fast" digitalWrite() (and etc) function that generate as little as a single instruction for the case where the arguments are constants (and yet still handled the case where they weren't; there are several "interesting" ways of doing this.) In the end, none of them were accepted for inclusion in the Arduino core, for various reasons. I think the big problem turned out to be that most people agreed that having the performance of the function vary over a couple orders of magnitude, depending on the types of the arguments, was not a very intuitive thing to spring on beginners.