Snippets, modules and plugins are all "containers" for PHP functionality. They can even be a two-liner to include() an external ordinary php file and then return its output if necessary. That’s the only thing that needs to be remembered about using PHP code in MODx, since it’s passed through a template parser it won’t automatically create a page to display output. It can echo or print, but otherwise output must be captured in a variable and the variable returned.
Chunks are pure ... well, chunks ... of HTML (which can included snippet and TV tags). Convenient for consistant bits of content, such as header or footer content that you want repeated for all pages, even if they use different templates. Also often used as form or layout templates for various snippets, such as the login snippet or the news article summary display snippet.
Modules work in the backend as extension to the Manager (see my in-progress ecommerce management module for an example,
login as guest password guestuser and run the ShopX module), plugins work invisibly during the system processing, whether front-end or back-end depending on the events it is set to intercept (I’ve used them for managing the SESSION for maintaining a shopping cart and for a cookie-based template switcher); snippet output and chunks are inserted into the document during document parsing by the MODx parser engine.
TVs are a special case of front-end insertion, whether they are HTML code like a chunk, or use the various @ bindings, or generate "widgets". TVs become quite addictive once you get a taste of the power.