This applies to classic RISCOS up to 3.1, the latest version may work differently, since modern ARM devices have a different memory controller.
"One-to-many mapping is used to 'hide' pages of applications away when several applications are sharing the same address (&8000 upwards) under the Desktop. These pages are, of course, not held at &8000"
Desktop applications run in user mode, and see an address space starting at &8000, the MEMC translates this to the real address in physical memory. When the 'desktop' switches between tasks, it changes which memory pages are mapped into address &8000 and upwards, which isolates / hides those memory pages from other tasks.
Code that runs in a privileged processor mode (like relocatable modules) can access the full memory address space. Relocatable modules are assigned memory in a shared block called the module area which is not dynamically mapped by the MEMC, allowing them to be called from anywhere. Hence the modules must use relative addressing so they can run at whatever memory address they are loaded. If modules were unloaded from memory, this could leave gaps of unrecoverable memory (unless the next module was small enough to load into a vacant gap). The result being that you often had to reboot a computer that had been running for a long time, when the module area was full.