No, once you lose a GCHandle then you've lost it forever. There is no notion of a 'handle to a handle' in the garbage collector. You can only create a new GCHandle for an object, it will add an extra reference. The object this lost handle references will be permanently referenced, it is a leak. Note that GCHandle is a struct type.
The idea of keeping objects pinned for any length of time is detrimental to your program's perf. Short from giving the GC a harder time to work around the obstacles, it also prevents it from compacting the heap properly. This increases the likelihood of cache misses, very expensive on modern cores. These side effects can last for a while.
If you need pinned memory then allocate it with Marshal.AllocCoTaskMem(). This also stops you from creating pointers to managed data that has an unpredictable memory layout. Layout that differs between different versions of the JIT compiler and is highly dependent on the struct or class declaration. Only Marshal.StructureToPtr() can give you hard guarantees.