No, it is a common misconception that a function (i.e. SQF) doesn't allow you to sleep/waitUntil. There is nothing like something being written down on the BIKI to convince every scripter in the world of its truth ;P In fact, sleep/waitUntil can only be used in functions!
It is only event handler functions that do not allow sleep or waitUntil (for the technically minded, this is standard practice in implementing software event handlers: you run all event handlers using a single thread consecutively, rather than with lots of threads concurrently, so you don't have to start up lots of threads every time an event occurs. If you allowed pauses in this system, then other event handlers would be delayed and one of the key traits of events is that they are timely). Even then, you can just spawn a new function from inside the handler to use sleep/waitUntil as much as you want.
You get to use _time (time the script, not the mission, has run) in a script (SQS run with exec), but in a function (SQF run with call/spawn/execVM) you just have access to time (time since start of mission):
_startTime = time;
...
_timeInFunction = time - _startTime;