However, fundamentally, there were problems that could not be fixed. The entire OS was based on shared memory and message passing based on pointers. Tasks (processes) would read/write each others memory all the time. There was basically no way to implement memory protection without breaking all compatibility.
Why? Because it implemented syscalls through proper TRAPs, for one. While the actual implementation of the core OS wasn't multitasking or even have re-entrant syscalls, others came along and made it so (MiNT, etc) while retaining syscall compatibility. And the thing can be made to use memory protection, etc. even.
The problem with the whole Amiga package is that it was brilliant for 1985, but extremely dated for the mid-90s and the reliance on the custom chips arch there just really couldn't evolve well.