Any machine code program can access the tape input (ear) port. It can also access the output (mic). That’s how fast loaders and turbo loaders work. So certainly, it should be possible for a machine code program to load a ZX81 program.
There is one caveat. The machine code must either be running in upper RAM, so a 48K ZX Spectrum is needed. Or be running from ROM (EPROM) (like BASIC) in the ROM area. This is so that good consistent timing can be achieved. Machine code run from contended RAM (the same chips that the ULA gets priority access in order to draw the screen) does not run as fast, and the timing is not consistent. But, for £10, I’m certain that a ROM (EPROM) was not being used.
The hardware? I wonder if it was a dongle to make the program harder to pirate. But that does not make sense if it runs okay on the emulator. And the article that Moggy provided a link to does say that:
The ZX81 cassette is then loaded through a socket on the Slowloader circuit board, rather than through the normal cassette port.
However, on the emulator, code for accessing the hardware is intercepted so that the emulator can provide the correct data to the Z80. So if the hardware is using the same Z80 I/O port and the same bit allocation as the ULA does, then software ran on an emulator will see no difference, and hence will work.
Meanwhile, the same may not be true with a real ZX Spectrum. Especially as there is a difference between the ULAs used in issue one and two boards, and the ULAs used in issue 3 and later boards.
There is one difference between a ZX81 and a ZX Spectrum that I have not mentioned, the filter components (capacitors and resistors) are different between the two. Hence ZX81 tape signals will be seen differently by the ZX Spectrum ULA compared to how a ZX81 ULA sees them. In the software, it may be possible to take account of this. But, this may not have been considered in the first version, hence the need for the hardware board, presumably with an input circuit more like that on a ZX81.
Mark