Custom joints are an advanced feature of the engine. The engine provides a library with a full implementation of all of the build in joint types plus some special ones.
Custom joints are also more flexible than standard joints, in the sense that features like destruction or malleable joints become meaningless. An application for example can make a hinge joint and in the middle of an update change rearrange the degree of freedoms to turn the hinge into a ball and socket in order to simulate damage.
In addition feedback information for custom joint is more detailed, for example the reaction forces and joint stiffness is provided in per row by row constraint bases, and not as a general combined value as it is with the build in joints.
In general we encourage any application to use custom joints as the first choice and consider the build in joints as a legacy feature.
However this flexibility comes with a price, to take full advantage of the power offered by customs joints the user is required to have a more involved knowledge of constrained dynamics than just planar Newtonian physics.