Why not just give apps chunks of non-contiguous memory and let them deal with that fact? Then like realloc, the memory they need stretched may just be moved first.
Besides, why would you design around the lack of a MMU? Even in embedded space it's often there.