Simplistically ... just from the wording in the OP, use '<= (i.e. less than or equal to) instead of '=.
You'd need to figure out which of the 3 dimensions are the more influential during a sort, that's up to you (i.e. what would you want - levels different, then perhaps Z values). Then that defines the greater/less than check, if it's equal then the next one in line does the same. E.g. if you first check X, then Y then Z ... then a simple change to <= in your function would suffice. But what if you want higher / lower levels for Z to be the main defining one?
To show why you need to choose the first to check: Another less useful idea could be to create a comparison function. Note a comparison function for sorting basically returns 0 (if equal), -1 (if less than) and 1 (if greater than). Then add those numbers together by comparing each dimension in the 2 points, checking the result for > 0 or < 0 or = 0. Something like this:
((> n m) 1)
(0)))
(comp-lst '(1 2 3) '(2 1 3)) ; Returns 0 as none of XYZ is assumed more influential
If that returns 0, they're "equal", even when they're not. Thus even if that returns a negative (i.e. less than) or a positive (greater than), what does it actually mean?
BTW, with coordinates you have double floating point values. It's highly unlikely that any 2 double floats are equal. So the = function isn't a very good idea for equality testing in this case. I'd advise going with the equal function instead with a fuzz factor to accommodate floating errors. That fuzz factor depends on the scale of the values - since a double float is close to a 13 to 16 digit decimal accuracy. That means if the scale of the number is in the 10000 range, the accuracy is within 13 to 16 less the already taken up 5 digits - i.e. 8 to 11 decimal places after the point. Therefore the fuzz factor should be adjusted depending on the values being checked. Usually you just use the 8 decimal places to catch most problems by doing this: