I tried making a very simple tree with a black-white gradient UV-map from bottom to top, to see if a partly UV-based, partly world scale displacement would work for 'swaying' trees. It doesn't seem to work, as whatever I use for displacement (vdisp, redirect or just displacement), it won't use the UV-based gradient.
Using the object normal kind of seems to work though, setting maximum slope to restrain amount of movement. Anyway, here's a little test.
The tree itself is extremely simple, just a bifurcated stem and a series of halfdomes, where the leaves are procedural, opacity by PF.