It's just a matter of using the correct labels. h files can be included anywhere; you don't need to worry about their contents and the assumption made by just about everyone will be that a .h file doesn't contain any code. #including a file that contains code will work once, but after that you'll get compiler errors (likely duplicate symbols), so it's best to stick to what works. Compile C files and #include H files.
It's like putting acid in a bottle labelled Water. Fine as long as you know that, but the moment you forget, or the moment someone else comes along looking for a drink, then you have a problem.