Hi,
TestComplete does not use anything like path or environment variables search for the script units. Personally I consider such implementation to be correct as it eliminates the problems when for some reason some other script unit is used instead of one that you are expecting to be used.
The actual behavior is quite logical, as for me:
-- All script units that are needed for the test code must be included in the project. Those script units are not necessarily must be in the same folder, but may already exist and be located in some external folder (named, say, ReusableCode). Such existing script units may be added to the project by using the 'Add Existing Item...' context menu command for the project's Scripts node;
-- If the script unit calls the code from another script unit, this another script unit must be referenced in the calling unit via USEUNIT (or equivalent) statement;
-- When you deploy test project that uses script units from ReusableCode folder to another location, you must preserve the relative folders hierarchy.