Compile error (unless adding extra lines) when multiple files in a single sketch

It sounds to me like the problem is caused by the automatically generated function prototypes being put in the wrong place. The way you can check this is by looking at the generated .ino.cpp file in the sketch subfolder of the temporary build folder. You can find the temporary build folder location by turning on verbose output during compilation in File > Preferences, compiling, and then examining the contents of the black console window at the bottom of the Arduino IDE window.

Usually the workaround for this is to manually create the function prototypes for the functions that are causing the failure. The sketch preprocessor will not do automatic function prototype generation for any function that already has a prototype.

Generally the Arduino developers are interested in fixing these sorts of failures whenever possible if the specific cause can be determined and a complete minimal demonstration code provided. I have seen a couple issues reported where they've just said "we're not going to be able to fix this, users will just need to manually declare function prototypes in this particular case". There is a big change going on right now where they have completely reworked the sketch preprocessor so it's possible this issue was already solved. You can check this by testing the code that doesn't compile on Arduino IDE 1.8.4 with the latest Arduino IDE 1.9 beta build, which you can download here: