I used MHolmqvist's code snippet to load my script library from the project dir, and I ran into the issue of needing to restart soapUI to pick up the changes in the groovy script. However, I notice that if I make any change in my Script Assertion that refers to my external script, any changes I've made in the external script get picked up.
-make change in external script
-run assertion: change in external script not recognized
-add whitespace to assertion
-run assertion: change in external script recognized
Still annoying, but less annoying than restarting soapUI.