path() can be used to change the entire path. So you could call path to record the path, and addpath, and then before return path(oldpath)
If you were using functions I would suggest an onCleanup.
I would recommend enclosing most of the script with try/catch where the catch restored the path and then rethrow() and the normal branch just restored the path.
You still have problems with control C or out of memory as you cannot catch those.