Suppose 'a is 'static. This implies that R must live for at least 'static
Now R itself may not live for 'static if say it is also a closure (closures are the most common types that may not have a 'static lifetime).
Hence, you need to specify the bound.
AFAICT the only problem here is that rustc sees the type Reader<'a, R, T> mention the type R, so it convervatively assumes that fulfilling Reader<'a, R, T>: 'a requires R: 'a.[1] Since the self: Reader<'a, R, T> value is captured in the closure, this becomes relevant / a problem.
There isn’t really any way to avoid adding a R: 'a bound here, but it technically shouldn’t really be able prevent any use-cases either, I think. So you’ll need R: 'a (and of course also T: 'a, but that bound is truly necessary Edit2: on a late second thought, perhaps that “fact” is more debatable than I initially thought, too) on the then method.
The same thing also already applies for the type dyn Fn(R) -> T + 'a. Even though it “claims” to implement 'a, you only get dyn Fn(R) -> T + 'a : 'a if R: 'a and T: 'a also holds. It’s not a problem of the struct or the box.
For soundness, AFAICT this restriction would only be necessary if the Fn trait actually had any method returning a value of type R; for traits with only methods acceptingR in the method arguments, the restriction is probably an over-restriction whose only use I can think of off the top of my head would be to keep backwards compatibility in the possibility to add such methods to the trait in the future. In case of Fn, this possibility would be rather nonsensical, but this is talking about the general case.