The C++ objects wrap a RenCell but add their own tracking information to it. Right now, for instance, when an extension is called it is done with data on the Rebol/Red stack...but the stack elements are of size RenCell... not of size Value. Hence we must, in a new place on the C++ stack, make Values and copy the bits into them.
If Rebol or Red knew they were calling the extension, they could leave the right amount of room for a placement new to just read and write the cells in place on the stack. The return value wouldn't have to be copied back into the Rebol/Red stack either, because it would by convention be understood to have been put in the right place.