A module extends the Manager with your custom functionality. No need to hack the Manager core files to add a new bit of database management, or an interface for an external mailing list script, for example.
A snippet parses PHP code for the front-end (similar to the <?php ... ?> tags in plain files).
A plugin interrupts the current processing (whether it’s the document parser generating a page, or some other manager function such as creating a user or editing a document). They are triggered by specifically coded "event traps" in the processing php code. For example, the document parser has several of these, like
// invoke OnPageNotFound event
$this->invokeEvent('OnPageNotFound');
So a plugin would use the OnPageNotFound event to "plug in" its own code at this point in the process.