Thanks Carsten I will read that thread too.
Everything here has confirmed to me that even after all strong references have gone, and before the weak reference goes away, if I do reuse the full userdata in the weak table, it will be prevented from being collected. So I should be OK.
I am using smart pointers in C++ for some objects, but not for this particular object. This one can only be owned by another of its kind, another object of another class type, or a Lua full userdata. I handle all those cases individually. So far it's working beautifully, I just need to be sure nothing will fall through the cracks. :-)