It certainly would be nice to have something that can abstract out the reference-counting part of Arc into core. This code turns out to be extremely subtle and, personally, it's a pain to have to re-implement while being careful to insert the right release fences around destructors... basically I want core::sync::atomic::AtomicCounter that lets you manually increment or decrement the strong/weak counts and perhaps has some hook for "please run this cleanup code if the strong count is zero in an appropriately-fenced manner".
Hmm, maybe worth writing a crate that rips the relevant bits out of Arc...