Where the input and output have the same lifetime.
The desugared version of your Greeter implementation is
impl<F, Out> Greeter for F
F: for<'any> Fn(&'any str) -> Option<Out>,
Type parameters like Out must resolve to a single type, but types that differ by lifetime (even if they only differ by lifetime) are distinct types. So there's no way Out could be capturing the lifetime 'any; the output type has to be the same for every lifetime input lifetime 'any.
Thus the implementation does not apply to fun, which has a different output type for every input lifetime.
For a direct solution, you would need something like a generic type constructor or a way to put a bound on the output type without unifying it with a generic type parameter. That's not possible in Rust today, but there are sometimes workarounds like shadowing the Fn traits in a way that doesn't require naming the output type with a generic type parameter.