...doesn't make sense...
All I can say is that by collecting and deducing information from your main sketch, the Arduino Magical Mystery Tour is set up to try to shield beginners (and not-so-beginners) from lots of the things that "real" C++ programmers have to know to do their jobs. Things like Include file paths, function prototypes, etc. The result is that experienced programmers who are new to Arduino sometimes just can't believe that their knowledge and "standard operating procedures" and "good programming practices" and, sometimes, just absolutely standard C and/or C++ usage just don't transfer directly to the Arduino Way.
When I get really frustrated (it happens, but not very often), I just create a Makefile and compile everything in ways that I know and get stuff from places that I know. For me, it's (usually) not worth the trouble for the "typical" little Arduino projects that I do.
If someone asks, "What happens if you ..." sometimes the best answer is: "Try it and tell us. Then we will all know."
The actual way Arduino looks for things and puts things together has changed a couple of times since I started with Arduino (about ten months ago). Because of the moving target aspect of things, I haven't tried (and don't want to try) to understand how the java part of Arduino gets things ready to hand off to avr-gcc.
When you first start the Arduino IDE, it takes inventory of all libraries in the Arduino distribution path and in your own sketchbook/libraries path. Finds header files that are in libraries. Finds cpp files in libraries. Etc. Figures out how to work things out if your sketch includes a particular header. That general information is (just about) all that I know. Even that little bit makes my head hurt.
[
/begin Standard YMMV Disclaimer]
Stuff that I have experimentally determined to be correct as of this writing might not hold true for the next release.
[
/end Standard YMMV Disclaimer]
As a matter of fact, we may find that specific and detailed knowledge of lots and lots (and
lots) of Arduino distribution libraries, and other Arduino stuff, that we all know and love (or not) may be rendered obsolescent (or downright obsolete) by the release (some time this Summer, I think) of the long-awaited Arduino Version 1.0.
Bottom line (for me): Experiment until you find something that works (like renaming copied header files to something else, for example). Don't get too comfortable with any "clever" (or not) workarounds that you find now. Don't brag about how you outsmarted the wizardry contained in the usual Arduino Magical Mystery Tour. (See Footnotes.)
Regards,
Dave
Footnotes:"The mighty words of the proud are paid in full by might blows of fate,
and at long last these blows will teach us wisdom."
---Sophocles
Final chorus of
Antigone"Well---the part about the 'blows' is spot on. Still waiting for the 'wisdom' part."
---davekw7x
"It's what you learn after you know it all that counts."
---John Wooden