I feel your frustration!
It does seem like two or more objects borrowing each other should just be able to exist happily within the same lifetime and all be able to be deallocated together at the same instant. Alas, it doesn't work that way.
Under the hood, there are very good reasons for the way it does work. Custom Drop trait implementations being one of the reasons.
I just went through a lot of quite a bit of tribulation trying to build an object that could be self-referential. With the help of many wonderful people on this message board, I think a safe implementation emerged, and I plan to publish it as a crate when I can spare a half-day soon. The odyssey is here: TrashPool to retain temporaries past the end of a scope
Another idea for self-referential objects (or sets of multiple objects) is the approach taken by the rental
crate: rental - Rust It can smooth over some of the rough edges using macros.