Graphs often compress a great deal of information into a simple visualizable structure. So it is not uncommon that vertex labels include more information than a simple index. For example, vertex labels might be lists. Graph handles this brilliantly:
graph = Graph[{{1, 2} \[DirectedEdge] {1, 3}, {1, 3} \[DirectedEdge] {2, 3}, {2, 3} \[DirectedEdge] {3, 2}, {3, 2} \[DirectedEdge] {1, 2}}, VertexLabels -> "Name"] Nicely yields the graph
The issue here is EdgeContract. It does not seem to operate on such graphs. For example:
EdgeContract[graph, First[EdgeList[graph]]] returns exactly the same graph. It does not contract the first edge.

