The Wii and GC are based on pretty much the same fundamental architecture. Code compiled to run on a given architecture is compatible with other systems running the same architecture, but not on systems running different architecture. It is not emulation, it just runs. PS2 and PS3 are based on totally different architectures, code written for one does not work on the other. That is why the GBA had an original GB built into it, the GBA architecture was not compatible with code written for the GB. Same with the DS having a GBA built into it, or the GC GBA player basically being a GBA without the screen. You can think of it in terms of the new intel Macs. Code written for PowerPC-based Macs does not work natively on an intel-based Mac (i.e. without hardware emulation). They code has to be recompiled to work on intel/AMD-based processors because they are based on fundamentally different processor architectures. However, programs that run on, say a Pentium 2 will also run on a Pentium 3, Pentium 4, Pentium M, Core Duo, Core Solo, (ideally) AMD chips, and any other processor based on the same architecture. The processor may not be able to run it well, but it is fundamentally compatible. Similarly, ATI and Nvidia chips are based on the more or less the same architecture, so games written for one (ideally) work with the other.
However, it is not just a matter of the processors, it is a matter of the other hardware as well. GC games are written to interact with GC hardware like the GC controller ports and GC controllers. Without some sort of hardware virtualizer that makes one controller appear to be the another to the games it would not be possible to get it to work. The problem is that the GC games most likely take over the processors and use them for their own purposes. It may be very difficult to get the CPU to run code for a controller emulator like that while they are running code for the GC game at the same time if the GC game has been given complete control over what the CPU does already.