For the Apple //e, it was very common to have an extended 80-column card installed which brought the machine up to 128KB of RAM via 2 banks of 64KB each. There are soft switches in the $C0xx space which allow you to specify which bank is in use. In these banks, the CPU could directly access and execute code if the switches were set the right way.
The thing is, it seems that the built in support for additional memory was limited only to the two banks and thus going beyond 128KB was not really in the design.
How did programs access the banks beyond the 128KB limit? To be clear, the question is about the RAM being directly accessible by the CPU and could be used for data and code.