Details of the underlying computer architecture (say, x86) and the implementation of the emulator (say, C/C++) inevitably leak into the abstractions nominally above that level.
One trivial example: let's say that I want to emulate a machine with 100,000 CPUs. On a quad-core PC. There is a strong pressure to reduce the number of emulated CPUs if possible, to more closely correspond with the physical architecture. This in turn leads the user of the emulator to avoid the kind of programming that would take advantage of 100,000 CPUs. Already the notion that "you can emulate anything" productively falls out the window.
Likewise for type-tagged architectures. (The user always has an incentive to strip away the "unnecessary" tags.) Look at Common Lisp and its "optimize" directives. The result is inevitably that somewhere in the system, there will be "C-style," non-type-tagged code. This is a Bad Thing.