The process I usually follow is to write any snippet, or plugin, or class code to use a path (or paths) from a system setting to find things.
The path points to the development location of the project files (assets/mycomponents/componentname ...). That way the project will run without really being installed except for the MODX objects. I almost never formally install the transport package in the environment where I'm working on it, but I run it there all the time.
The technique is described here (under Running Your Component):
http://bobsguides.com/mycomponent-tutorial.html. Put those System Settings in the 'core' namespace so they won't end up in your package when you run ExportObjects.
I use ImportObjects and ExportObjects as necessary while working and almost never run Build until the project is almost finished. At that point, I install it in a clean version of MODX somewhere to test it.
One drawback of this method is that the lexicon strings remain untranslated unless you copy the lexicon files to their appropriate installed locations. I usually just live with the untranslated key~~value pairs until near the end, when I run LexiconHelper on them.
For CMPs, you need to alter the namespace core path to point to the dev location if you want to run them without installing the package.