LPUNKNOWN is the same as "IUnknown *", or a pointer to an object which supports the IUnknown interface. This interface is the base class for every COM and ActiveX class. You would use it to pass a reference to a COM or ActiveX object when you don't know or don't care what interfaces it actually supports. It is for reference counting and finding other interfaces an object supports.
VARIANT data type is used for generic argument passing, between functions that do not know each others' argument types until run-time. It is used a lot in automation and for using ActiveX controls from loosely typed languages such as Visual Basic or JavaScript.
Both these types are part of the basics of COM and ActiveX programming. It might save you a lot of time if you pick up a book on ActiveX programming, as the first few chapters will cover these things and more.