Things like FreeRTOS and derivatives run happily on hardware without a MMU.
Without a MMU any separation between kernel and user mode is somewhat illusory (you can simply overwrite kernel memory), but there is still a distinction:
Typically a RTOS will be configured with a number of tasks and each task has its own stack. That means context switching is still very much part of the equation because whenever the kernel wants to switch a task, it must first save the stack of the outgoing task and then swap in the stack of the incoming task before handing off to the incoming task.
As a 3rd party developer (ISV) you would write your code to run inside the task context, and so you can take advantage of the task mechanism to get it to behave kind of like a lightweight thread.
Still, without a MMU there will not be any 'real' protection from messing with the kernel accidentally in this scheme. For example the single most trivial way to crash a RTOS without MMU is to misconfigure the stack size and then end up with a stackoverflow, accidentally wiping out kernel data/other tasks/overwriting actual program instructions...
... Now with a MMU the kernel can set up a page table mapping so that it can intercept pagefaults and use this to implement a segfault mechanism when it detects a bad memory access (violation of preconfigured memory boundaries). With additional security features baked into the silicon the kernel can also restrict what kind of instructions tasks are allowed to execute and in combination with the MMU implement proper separation between kernel and user mode/space.