The NLA editor is used for editing the position and interaction between actions in an animation. It's main use is for managing, editing, and organizing groups of actions instead of having to deal with huge numbers of keyframes.
Using the Dopesheet, an animator can create an action for an object that consists of any number of keyframes. An action for a complex character with a rig can have thousands of keyframes for even a simple action. Thus, managing the entire action via the dopesheet isn't practical. When I say manage, I mean perform an action on the action that doesn't require editing of individual keyframes. You can think of it like edit mode versus object mode. A 3d object is a group of vertices, an action is a group of keyframes. Object mode is useful because you can easily reposition, scale, or duplicate objects, as well as apply certain effects to them. The same goes for the NLA editor. You can adjust the start and end times of an action very easily, as well as apply effects, like blending two action together.
The ability to deal with each action as a whole in the NLA editor makes it very powerful when combining several actions into a longer animation. Animations often also contain repeated actions. In the NLA editor, you can duplicate an action with ShiftD and reuse it as often as you want. It's the same as instancing an object. It allows the animator to reuse an action many times while still being able to edit it easily.
In an animation, the process would usually involve creating certain actions in the dopesheet, then combining them in the NLA editor. Since you can select and move entire actions very easily, it makes adjusting the general timing of your animation much easier than moving all of the individual keyframes.
Another key feature of the NLA editor is the ability to organize an animation. Since there can be multiple tracks (essentially layers) you can separate certain kinds of actions, or actions for certain parts of objects. You can also blend between layers, so the animator can blend between two actions smoothly.
If you've ever used the VSE in Blender you will notice a large number of similarities between the purposes of each editor. The point is to be able to manage the entire animation without having to deal with each keyframe, just like the point of the VSE is to manage the entire video without having to deal with each frame individually.