Do you have to be a functional programming expert to understand all this?
No. As John says in his talk, you don’t need to understand what a trifunctor is, why ZIO[R, E, A] forms a profunctor on its R/E and R/A type parameter pairs, or what a profunctor even is to use ZIO. I would argue that the same is true for Final Tagless: to use it as a way to constrain effect wrappers, you don’t need to have a thorough understanding of type classes, higher kinded types or the Monad typeclass hierarchy.
It’s sufficient to understand why coding to an interface, instead of an implementation is preferable. And being open to alternative ways of expressing dependencies (in this case: not as a parameter, but as an implicit type constraint).