Think of it as separation of runtime and compile phase.
A module may have imports and exports that are only visible at compile time; this is exactly what for-syntax import/export does.
for-template is a little harder to explain, you can think of it as injecting dependencies in modules who are using your module.
It is useful if you have a module that is designed to be imported for-syntax (eg macro utilities or procedural macro implementations).
If you generate code that refers to symbols not in your scope but which must be available at runtime (well, at phi-1 relative to the current phase) in the module that is importing you, then you import the relevant modules for-template and the expander does the rest.
-- vyzo