Why can't you use microprocessor I/O pins as chip enable pins for ROM and RAM?
You can as long as you only want to access one memory type at a time.

Typically a micro is pulling in instructions from ROM in one or two cycles and the data from RAM in the next few cycles. Wash and repeat. IO lines will not respond fast enough so you decode the top few address lines to do this.

You can use the IO lines to select banks of memory. For instance if you had a lot of data stored in RAM or ROM chips you could split this into banks and use the IO lines to select between banks.