Spawn also accepts scripts that you have first run through compile preProcessFile just like functions. And like functions you call them using the name you assigned, not the script file name. In my case I did not need to use it, but did so as an example of its use. The difference is execVM must preprocess and compile a script before running, so for scripts you are executing many times it is better to use spawn because it will slightly reduce the CPU overhead.
As far as what Mandoble said above, I guess the other usage would be that you could dynamically create a code string and run it as a script i.e. in parallel (not freezing the game engine). In OFP you could only do it with functions which for most cases (in ArmA) run serially i.e. freezing the game engine until function is complete.