You could just use "~0.1" in SQS, which is the equivalent of "sleep 0.1;" in SQF, but then you'd have to navigate gotos just to make a loop and that is just punishing yourself ;P
sleep will always raise an error when you use it within an event handler or object init (either directly in the init line, or in a function called directly from there. In these cases, you must start a script with execVM or call a function/block with spawn in order to be able to use the command.
CONJECTURE (I strongly suspect this is true, but please don't shoot me if I am off the mark): I think the reason that sleep is disallowed is because in both of these situations a single thread of execution runs a lot of bits of code, one after the other (Either during init, calling every object's init code, or calling all the event handlers attached to an event). If you could delay this process indefinitely, using sleep, then you would prevent other code from being run on time. The advantage, though, is that the engine doesn't have to start a new script running for every one of these bits of code, so it saves a lot of CPU power.