You can also do functions via Label/GoTo with NVSE - this has the benefit of running it all in one frame and allowing you to get the results of the function within that frame.
Not without a lot of effort- you have to initialise a label before goto will return to it. So your script would look like
label 10if(callfunction1)endiflabel 20if(function2)endiflabel 30set callfunction1 to 1goto 10endif
When activation scripts run in the same frame, can have variables defined on them (unlike quests), and can be nested up to 8 deep (in CSR Fallout I've got activators with loops that call activators with loops calling activators which call activators which call activators) they're pretty much the best solution, at least to my mind.