Z-depth of Microdisplacements and Adaptive Subdivision Surface In Blender 2.78, there are two very cool features called Adaptive Subdivision surface and Microdisplacements. BlenderGuru has a great video on it.
If you don't have time to watch the video, here is a summary in lamens terms (written by me; just wanted the quote format to emphasize it):

Both of these features are Experimental features for Cycles render.
Adaptive Subdivision surface is an extension of the Subdivision surface modifier that calculates decreasing levels of subsurf the farther away the object is. It can even change the level across an object.

Image by BlenderGuru.
Microdisplacements uses the Displacement input of the Material Output node. It generates extra geometry at the time of the render. It's like a Displace modifier that only displaces during the render and uses any combination of Cycles material nodes.

However, when I try to use these features on a plane and use a Separate XYZ &gt; Z node in my node setup, it doesn't work. I am theorizing that this is because the plane does not have any Z depth before the render. Is there a way around this?
As Duarte mentioned, generated coordinates do not factor in the displaced mesh. So you need to get a Z coordinate from something that does. You can use either "object" coordinates (available from the texture coordinate node or the geometry node, their "object" outputs are the same) or "global" (aka world space) coordinates from the geometry node's "position" output. These do not rely on precalculated geometry, instead they simply use the shading point's location. 



The difference between the two is that object coordinates are in "object space", meaning they account for the transformation of the object. That means they won't move when you move the object, which is good for animated objects (otherwise they might appear to "swim through" the texture). It also means that multiple copies of an object will always have the same texture, although that one may or may not be desireable. Global/world space coordinates are absolute and do not account for object transformations and locations at all. They're nice when you need to keep consistent texture locations across multiple objects (such as adding a waterline to objects below the level of your water mesh) or if you want different textures across multiple static copies of an object