Virtual memory without an MMU
It is certainly possible, but you may have to redefine what "memory" is.

To make this transparent to a task or process, you will most likely have to emulate every operation, essentially creating a rather slow virtual machine. The kernel (virtual machine manager) can then verify each call and return data from either RAM or disk, or prevent illegal access.

A more cooperative design can be used, but it is more intrusive. Each task or process can request to use a certain block of memory, and promise not to touch it before and after the request has been granted/released. This can not detect an illegal access, but it can allow a number of tasks to run in a limited memory space, assuming the kernel can manually copy the memory somewhere when it is not currently needed by a task. Memory can be copied to and from disk during a context switch, if necessary.

Neither of these are really practical, of course. To answer the question about why it is not possible, just remember that without an MMU, one task can overwrite any memory, and the kernel has no idea where a task has been writing or where it is going to read.