Just to ensure the pro side is somewhat represented; There are some contexts in which I nearly always reach for failjure and those tend to be near API boundaries, especially the HTTP request/response kind. I agree that it "leaks" and to some extent I think this is positive pressure. I keep it out of libraries and shared namespaces.
failjure leads (me) to a style or pattern where I can trust certain meta behaviours to hold over business failures around a certain scope. Here are one or two things I use or do regularly: f/try-all harmonizes failjures and exceptions in a let-like way with short-circuiting. chef_kiss I also tend to have ring-style middleware that renders raw failjures as ring-style http responses with specified schemas.
I've found that I can usefully teach this style to visitors to the codebase as long as I don't say "monad" ever.