What is the proper way to destroy geometry?

Right, with the C++ wrappers inside the old OptiX API, you need to explicitly call destroy() to get rid of the underlying OptiX objects. Exactly the same as if you used the actual C API entry point functions.
https://forums.developer.nvidia.com/t/optix-garbage-collection/158116/2

The C++ wrappers are headers inside the OptiX SDK. You can step through them with your debugger to see what is actually happening.

(Inside the new OptiX 7 API all this is done with native CUDA allocations and you define where the necessary CUdeviceptrs come from, e.g. from individual allocations (slower) or by using some blocks of memory in some arena allocator.)