Dark Half, I'm a little confused as to why Handles are beneficial in your first example. Couldn't you simply return an object of type Gadget from CreateGadget()?
MyGadget.Gadget = creategadget(5,5)
Position(MyGadget, 15, 15)
Function CreateGadget.Gadget(X,Y)
Function Position(G.Gadget,X,Y)