What I understood was that since the function never returns null, according to you the compiler should complain about the return type being an optional. Did I get this right?
If so, this would mean that you can’t use this function as you would a fn () ?S, which could be required by some kind of interface. It’s the same reason you can discard parameters from the function prototype: fn (_: UnusedParam) void.
The Iterator interface expects a fn (...) ?Item function. If the compiler were to forbid you to return ?Item because it never returns null, you would never be able to use this interface with your function.
Now I never have seen an iterator that can’t be entirely consumed, so maybe this example isn’t the best. But it illustrates that disallowing coercion a “wider” type would unintentionally disallow many kind of interfacing.