It's interesting to read someone else thinking that - I am about to graduate with my CS / Engineering degree, and I've tried to take classes which benefit from university instruction. The courses I've chosen and found most valuable have essentially been the ones you named: compilers (we wrote a compiler for a C subset), operating systems (we wrote a simple operating system with multiple processes), networks (implemented the TCP stack in userspace), and algorithms.
If nothing else, these classes were great because they removed the mystery of what happens after you write your code. Many jobs boil down to moving strings around the network, and many programmers draw a line somewhere in the towers of abstraction we've built to do this, and never cross it. But you'll have the priceless benefit of confidence that if something goes wrong, it's code all the way down, that you can understand and debug.