Additional Tip for Deleting UDTs
I know this post is old, but wanted to post one more tip. Sometimes UDT's reference other UDT's within their definition. For example, let's say someone created "TankGroup" UDT, and within it, there are 10 "Tank" UDT's. If you have deleted all the "Tank" and "TankGroup" Tags in both program and controller scopes, the cross reference of the "Tank" UDT won't find a reference for it, even though it still exists in the "TankFarm" UDT. Thus, the program will prohibit you from deleting it.
If you've deleted all your references to program and controller scoped tags, and are still having issues deleting UDTs, search through all your UDT references until you can find the "parent" UDT (in this example TankFarm), delete that one, then you should be able to delete the "child" UDTs (in this example, Tank).