GPS's don't use UTC for the simple reason that using a discontinuous time system at the low-level is insane. The Russian GLONASS does have leap seconds, and every time a leap second get applied the system has hiccups (as expected). The GPS system simply keeps its own true seconds-since-the-GPS-epoch counter and never steps this for leap seconds. Adding the leap seconds is left for the display routines in the individual end-user GPS devices.
As I see it, it really doesn't matter what UTC does as long as computers implement the low-level (internal) timekeeping correctly. If un*x/linux were to have a true seconds-since-the-epoch counter in the kernel with no leap seconds then time difference calculations would be trivial. Each program wouldn't have to have special (and probably largely untested) logic to deal with the time discontinuity around leap second time. Leap seconds (just like daylight-savings-time/normal-time) could be added by the display routines that map seconds-since-the-epoch into a human readable time. There is no need to muck up the low-level timekeeping for these oddities. Only programs that print out the time would need to even know that a leap second occurred, and in most cases that would all be done by the library routines.
Dan Bernstein first tried to get this low-level stuff straightened out, but folks largely didn't care to fix the problem because POSIX essentially mandated one do things in the more complicated fashion. http://cr.yp.to/proto/utctai.html