How to make commands invoked by drush_invoke not to fail after adding extra option?
The preferred solution is to use drush_invoke_process() for subtasks. This will execute the command in its own process, completely isolate from the parent.

If you do need or wish to use drush_invoke() (doing so is a little faster, since you don't need to bootstrap again), then you should use drush_set_option('strict', 0); to disable options checking.