It's not that difficult to write code that iterates in chunks and yields now and then. Of course you want to avoid non-finite I/O calls (make use of timeout parameters where available).
Things that need low latency (eg. counting encoder ticks) are still interrupt driven (or handled by dedicated peripherals).
The 68k lacked the ability to resume with full state intact after a bus fault, which made an off-chip MMU painful (but there was one - the MC68451[1]), but this doesn't affect the ability to do pre-emptive multitasking at all.
AmigaOS famously did have preemptive multitasking - we used it to mock PC and Mac users with for years.
[1] https://en.wikipedia.org/wiki/Motorola_68451 Note that to do full virtual memory with a 68k, Motorola proposed using a second 68k to handle page faults due to a design flaw:
https://retrocomputingforum.com/t/correcting-errors-by-dupli...
https://en.m.wikipedia.org/wiki/MagiC
and
What it did not have was memory protection or virtual memory. You do need an MMU for those.