So, we have to distinguish between your title and your question.
First your title:
Sending pointers to another process
yes, you can do that (pointers are usually convertible to an integer type), but pointers are always specific to one's process memory – the receiver process doesn't have access to that, so the pointer shows into nothingness (you get a segmentation fault), or worse, to something else (your program runs with wrong data).
But can we send objects using GVariant?
Generally, no. You can't look inside objects, so they might contain pointers. See my comment above.
However, many objects in fact work without pointers, so the type information and the memory that belongs to an object is sufficient to "recreate" it on the receiver side, just by casting the received memory into the shape of the object you know it is. However, that is very object-specific.
You will probably like to read about serialization.