Before I explain what a dual-quaternion is, let me start off by telling what a quaternion is.
A quaternion stores rotational information of an object. Quaternions consist of a scalar and a vector.
In computer graphics, you can rotate an object either by using a rotational matrix (3x3 matrix) or a quaternion. However, quaternions take less memory space, they are faster and do not exhibit gimbal lock issues like matrices do.
Dual-quaternions take this concept even further. Dual-quaternion stores not only rotational but also translational information. Think of dual-quaternions as a 4x4 matrix but on steroids. They are faster, leaner and ripped like hell.
Just like a 4x4 matrix stores rotation and translation information about an object. A dual-quaternion store the same type of information but in two different quaternions. One quaternion represents translational information. The second quaternion represents rotational information.
It is a bit scary to work with quaternions, let alone with dual-quaternions. Not many authors can explain them well. After reading several books on the topic, I found this book. It describes quaternions beautifully. And I found this article which explains and provides source code for a dual quaternion implementation.
Should you use dual-quaternions? I don't know if I can give you a proper answer. I love working with quaternions and dual quaternions. The only problem that I have is the lack of support in OpenGL Shaders. OpenGL Shaders expect space data in matrix format. Unfortunately, the time gained with dual quaternions is lost when you transform them to matrices. Nonetheless, I use them in my game engine. They are worth it.