Well, there's the kernel, which handles flinging packets between interfaces, filtering, etc., but your average router has lots of services it provides as well: DHCP, DNS, file/print sharing via USB ports, etc.
Right, and the Kernel could just provide those. No need to write something to load extra code from storage and run it.
Loading even more functionality into the kernel is at odds with security, stability and maintainability. Its also not going to save much/any in the way of resources.