From my understanding, "program tags" are like local variables in a C program. They are restricted to be accessed only from the scope they are declared in, which in this case is a particular program. As far as I know there is no way to access these local variables via the EtherNet/IP interface of the ControlLogix. If you declare them as "controller tags" then they are like globals in C and can be accessed from other programs on the PLC and externally from the PLC, such as via EtherNet/IP.
If you want to access data in local variables from outside of their limited scope, perhaps their scope should not be declared as local to their program. If you are working around existing code, my best guess is that you would have to mirror that data somehow. I'd suggest adding a rung in your ladder logic to mirror whichever variables you need into a controller tag or a data assembly on your LabVIEW system. From a simple experiment I don't think RSLogix5000 lets you simply alias program tags into controller tags (and this would defeat the purpose of limiting their scope in the first place...).
As far as accessing UDTs, hopefully my links above will provide enough details on how to do this, providing you are accessing tags that are set to the right scope.
oddly enough, the rockwell HMI Panelview Plus can drill down to the program scoped tags(using the configuration softwarefor the panelview plus RSView ME) So there must be a method of getting them out. its just not documented. (my guess)
"sure there is more than one way to skin a cat, but a cat can only be skinned once."