TL;DR:
Early on the user side need was covered by hardware add on, as software couldn't deliver, while later on (>1985) no market existed to pay for such a product.
CP/M was mostly portable across systems but most of them were z80 based.
While many CP/M systems were Z80 based, CP/M software tend to stay within 8080 boundaries. That was not so much due to the Z80 gains being minor, but a basic need to be compatible across all platforms.
What prevented, at least on more powerful 68000 and 8086 systems, the creation of a loader that translated z80 instructions in native machine language?
Nothing. The question is rather who would have the benefit and be willing to pay for it. After all, such software would be more than a weekend job when done as a product. It's way more challenging than emulating a CPU - not to mention that it would still need an OS translation layer in addition.
Anyone who willing to spend money did rather go for straight hardware add on. There existed several cards for the PC, like the BabyBlue, as well as add-ons for 68k machines like the Atari ST. Of course, one could also use an emulator - which came with some speed penalty(*1).
The situation was different for manufacturers of software. For them, source (semi-) automated conversation was the way to go - such as XLT86 for 8080 to 8086 Assembler.
The 1984 NEC V20 finally offered cheap way to get a hardware-supported 8080 emulation, enabling users to run CP/M software on a PC (XT), needing only a thin call and OS translation layer. Except, by 1984 CP/M-80 was already on the way out. Software manufacturers delivered native versions of their products, or had switched development completely over to DOS. Which usually came with switching for a more modern language such as Pascal or C. At that time interest in CP/M compatibility was mostly a wish in the home/hobby market - not exactly the environment known for paying adequately.
The same is even more true for 68k machines - that era only started in 1985 when machines like Atari and Amiga were introduced. And while Atari did manage to acquire a considerable foothold of the professional market (at least in Europe), the majority of converted applications came from the IBM PC, where, as already mentioned, development had moved to HLL, which in turn allowed automated conversion by recompilation.
In fact, Atari even packaged a Z80 and CP/M 2.2 Emulator with their machines for free to corner exactly that need. In reality it was more of a marketing argument than really useful, as the performance lingered somewhere around a 1-4 MHz Z80. It worked, but not as great as one would expect.
There were at least two hardware add-ons for the Atari ST with Z80, but neither achieved big sales due to the very same reason as before: not many private users would spend much money to run outdated software that doesn't utilize the features of their new machines.
I guess self modifying code was not used on professional CP/M applications like dBASE 2, etc...
Oh, don't underestimate that part.
*1 - An 8088 is, when it comes to memory, clock for clock about the same as a Z80 or even slower. Any emulation would suffer greatly.