I think the biggest difference between gap element and contact element is that gap elements will ONLY take axial stress. One application for gap element would be toe and heel action, and for contact element would be the friction between two bodies.
It depends on the software you are using. MSC/NASTRAN gap elements can have axial and friction forces.
Gap elements are for node to node contact and do not allow for changing contact to other nodes.
Contact elements are node to surface contact and calculate the specific contact areas and can allow for sliding and friction which can change the contact areas.
Both have their strengths and weaknesses in capability and ease of use.