1) When should I use the LWP::UserAgent, and when should I use SOAP::Lite?
Use SOAP::Lite when you want the extra abstraction and less work -- as it supports multiple encodings, it will likely be more forgiving of returned structures should they change schemas. Use LWP::UserAgent when you have special serialization / deserialization needs that can't be met with SOAP::Lite. (which is actually very unlikely, as you can pass alternate serializers / deserializers to a SOAP::Lite object)
2) When using SOAP::Lite, how and when can I build the SOAP content from scratch. What should I use for the SAOP action (In my demo it was the uri with a prefix, but is that the how its done all the time)?
Look through the SOAP::Serializer section of SOAP::Lite. (I've completely overridden the deserialize method in SOAP::Deserializer, but I've never tried doing it with the serializer)
3) What advantages does SOAP::WSDL give me over SOAP::Lite. Is it more recommended?
SOAP::WSDL came along after I started playing with SOAP::Lite, and I never played with it, as it's still listed as an alpha release. I know that the SOAP::Lite has improved its WSDL support since the two came out, but I don't know how the two compare, as I don't use that functionality.
oh -- and you may want to ask your questions on the SOAP::Lite mailing lists, as I don't know how many people on the lists read this site.