timer.setTimeout doesn't "simulate" a delayed callback - that's what it actually is.
An example that actually uses coroutines directly rather than wrapping them up might be more convincing.