Forum OpenACS Development: Response to Difference between Service and Application Package

Yes, dependencies are the trick to get things loaded in the right order.

But having said that, the procs don't need to be "known" until they're called, and all the libraries will be loaded before they're called, so it shouldn't be a problem, unless ... you have top-level (non-proc) code in a proc library file that's being executed.

That's not the right place for such code.  Code that's executed at start-up time should be placed in an "*-init.tcl" file rather than the "*-proc.tcl" file.  All the library files are sourced before the init files are sourced, so putting stuff in an init file guarantees that all the procs you need exist.
.