Calling RefCell::borrow_mut is necessary to obtain a &mut B, which is necessary for calling update. The borrow_mut checks that there is no other active reference to B. In Rust, having a &mut reference gives exclusive access, meaning no other references to the value are allowed. With RefCell this is guaranteed using a runtime check as explained here:
You could add a &self method on A that calls borrow_mut() itself.
But generally you won't have many options for abstracting such things away in Rust. Rust uses the type system for memory management, so the implementation details of your memory management will affect the types.