You'd have to do that via code (for example ent_buffers, see previous post), yes.
That's true, the available data is very limited (for my cases it's enough most of the time).

To help with your original question: Just use 128 as your "0" in your texture channels, then everything below 128 is negative, above is positive. In the vertex shader:
float4 texData = tex2Dlod(...);
float3 displacement = (texData-0.5)*someScalingFactor;


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends