Hey Brian,
Sorry about the delayed response, been hectic this month.
CK does support atomic operations on shared memory, and so does ck_spinlock_t, no issue there. So do most other synchronization primitives (but not all) and ck_ring_t (and upcoming disruptor).
The restriction (assuming normal backing for the memory and no other weirdness) is that data structures that involve pointers require that addresses match, if that's done then things should just work.
A rule of thumb you can go with here is that if init is taking a pointer to a buffer of some kind or there is a ck_malloc callback, then CK is probably using pointers: addresses must match and your shared memory mechanism must consider this.
Pointer-less ck_epoch is sitting in my queue, and I plan on pushing that to master for some internal projects slated for September.
If you've some cool real-world use-cases for pointerless implementations of other data structures, I'm all ears (ck_ht/ck_*hs/ck_hm comes to mind, as well as ck_epoch which is covered).