The whole module is basically a list of tracks, that can be played in virtually any order. A track is a list of channels, in which samples are played with various different effects. This is very similar to midi, except that the samples are actually different for each module, and therefore have to be stored. That's the main reason why modules are bigger than MIDI files, since a fair bit of wave data needs to be appended to the file. The instructions for each channel of each track also need to be stored, but usually take up much less space.
Synchronisation is extremely easy with modules.
Usually, module players have a synchronisation feature, so that when the module player encounters a special instruction in the pattern, it calls a user defined callback procedure. This procedure can in turn do whatever you want, like set a fading out coefficient, swap a texture, print some text. This week's demo will show you how to do that. As usual, this will make things much easier to compile in the future. Now that just runs a main loop with absolutely no synchronisation.