Module's code is linked directly to engine/executable binary (mostly statically), while GDNative is a dynamic library, which uses wrappers/marshalling to communicate with engine's core.
For the second one, you don't need to recompile whole engine, so it's kind of easier for development iterations.