For example, if you have a low-memory machine with an external ZIP drive, and you hardly ever use it, you can just insert the ZIP module while you work with the drive and then remove it once you finish. The RAM taken up by the module is immediately reclaimed.
Of course, you can set this up to happen automatically. When you try to access the ZIP drive, the kernel notices that it doesn't have the ZIP module installed and automatically loads it, then discards it when you finish it.
The kernel even does dependency checking. If the ZIP module needs to be loaded, but it depends on the Parallel Port module and that isn't loaded either, the kernel will autoload the correct modules and then discard them when they are no longer needed.
There can be a slight speed penalty while the kernel is loading a needed module, but you can configure modules to be permanently resident if you like.
By loading and unloading modules, you can alter the operation of the kernel in almost unlimited fashion. You can load and unload support for filesystems, devices, network protocols, and much more. By switching between which modules are loaded, you can even change the way hardware is supported, dynamically, without rebooting.