main.cpp isn't a 'sacred' file. DGDK handles that bit fore you as it has it's own single entry point unlike general C/C++ coding where you have main(), winmain(), etc...
Every .cpp file gets compiled just like your 'main' so all the .h files get included only as references to variables and functions from those other .cpp files, just like forward referencing. They just get thrown into another 'object' file for the linker to handle.
In general:
.h references to everything
.cpp the code (which will get linked)
Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!