PC is little endian. Wii is big endian. A compiled lua script is stored in the byt order of the machine it was compiled on. Begin to see the problem here?
On the plus side, Lua is remarkably safe, it does a check on various things like the version (obviously), size of the types it uses, and the byte order when loading a compiled lua chunk. So at least I got a helpful error message from it instead of a random crash or gibberish data.
End result; I spent a couple of hours today making luac swap the byte order of stuff it outputs. It was surprisingly simple actually, most of the time was spent testing it and fixing stupid bugs like me closing the Lua state then trying to use it, and I thought the crash was something wrong with the Lua source I changed.