My understanding is that implementing a function that takes an impl Fn as an argument allows the rust compiler to perform more optimization, but using an impl Fn instead of a function pointer shouldn't be more restrictive.
I can also pass a function pointer to a function which accepts an impl Fn, so I'm guessing that function pointer type in Rust is useful only as the generic argument for PhantomData to express type variance, in ffi and in some cases as an alternative to Box<dyn Fn(...) -> ...>.