1) Can the user frames been taught on top of the pallet? Then multiply the Z of the product by -1 if calculating the positions.
2) An alternate tcp such as a long pointer (round aluminum stock with a bulleted nose) that screws or bolts to the tool. Teach the alternate pointer as a different tool and teach the user frames with that tool?
3) If you can get the three positions relative to the robot, you could type those numbers into three separate position variables and use the MFRAME instruction to create the frames.
Just spitballin'