In the okay case, the type of closure is in fact impl FnOnce() -> {integer}, since this is dictated by the unwrap_or_else signature. But inside it, exit's return type of never can coerce to the required type of {integer}. When you're using exit directly, there's no "bare" never type, so there's nothing to coerce, hence the mismatch.
If you want to perform that etareduction, you can write exit as follows (coercing within the body of the exit function itself, rather than coercing when calling it):