Here is what I’ve understood from the conversation in elm town:
Although the documentation says that you shouldn’t write code which depends on the order of the elements in a set, people do that.
For example, some coder may write the function
pick : Set a -> Maybe a
Set.toList >> List.head
which picks an “arbitrary” element from a set.
This code should not break anything, if there is a new implementation of set.
For this reason they implement sets using an (internal) ordering.
And when they change the implementation of set, they make sure that this original ordering is respected.
The elements of a set must be comparable so that from that ordering the internal ordering (which is used when implementing sets) can be derived uniquely.
So all of it is for not breaking old, badly written code.