CMOD has the project global patterns.
You dont need always write abap code for cmod, but you need activate the project in cmod.
CMOD program include others programs and function in itself.
One example where you could need write abap code, is when you create 'exit variables' (for reporting or IP), the abap code for this exists is written in functions that are called by cmod.
Another example, is when you need enhance a datasource, the abap code for this is written in functions that are called by cmod.
Hope this help!
CMOD which is Smod helps bi developer extend the extractor using user exits. You are working on some extractors and users asked you to extend (add more fields to it), then you use cmod to write the logic for that newly added fields. You might ask why do you need to have separate place to add logic, the reason is that when system gets upgraded, you don't want to overwrite this logic. Once you have it here, it won't be affected by new upgrades.
Pls chk this links;