The borrow checker is currently stricter than it should be (it rejects valid programs), which requires workarounds. Once non-lexical lifetimes land, the borrow checker will be less of an issue.
This is true of most sound static analysis; the goal is to reject as few programs as possible, but there's always some things that exist in the world that your system can't take into account.