You're pretty much spot-on Ross.
At compile time, 'includes' will be inserted into your source code at the point where you place the include statement.
You can have as many includes as you want (each referencing a unique filename). Each 'include' will load a file with that name and insert it's contents into your main source file during compilation so that the compiler sees it exactly where you've placed it.
On another thread I detailed the way I layout my programs. If the 'include' is a heap of definitions (eg PIC Configuration Fuse Directives), then I would place that include at the appropriate spot at the start. If the includes are subroutines, then I would place those in the section I reserve for subroutines. Naturally I would not place an include that is say a subroutine at the very start of my program because it's the wrong place to put it as you have correctly stated.
Bookmarks