Because of the lack of cross document atomic operations, you might have to choose between at most once semantics and at least once semantics. This requires some fancy engineering to make it work for some use cases.
Minor failover is automatic, but major failover requires manual intervention to repair tables even when there's no data loss. That's a little confusing and not obvious.
The anonymous function query style can get confusing because it is partially executed client side and then executed server side. This can be a subtle source of bugs.
Source: I am the creator and maintainer of the Elixir driver for RethinkDB.