In some ways UserState is a legacy of our older async API when async operations did not return a xxOperation (EntityQueryOperation, EntitySaveOperation, etc). The UserState is used internally to track every async operation uniquely, and can also be used to cancel an async operation. I guess we tend to forget the fact that it can be used to pass user-defined information between the calling method and the callback.
In the case of the Coroutine Start methods, because the Coroutine is not itself asynchronous DevForce does not need a UserState. A UserState is assigned to the CoroutineOperation, but only because that class is a sub-type of the BaseOperation and a UserState is automatically assigned. Because the UserState isn't used by DevForce in the Coroutine, we didn't provide a means of providing it. You can pass parameters into the iterator block via the Start methods, however, and this does in some way give you the same functionality as a user-defined UserState.
We can certainly look at adding a UserState parameter to the Start methods and have opened a feature request for this. Thanks for the feedback.