Why should machines use UTC at all? We have a time standard that doesn't use leap seconds - Atomic Time (TAI). We can convert between the two fairly easily. So why not instead push for software to use TAI in place of UTC, and then convert for output or whatever?
Yup; down at the lowest ("OS") level, that's exactly what's done, on all computer system except MS's DOS/Windows (and who among us actually know what those systems do internally?
If you examine a unix or unix-like OS like linux's source code, you'll find that it has and uses the second counter that the time(3) function return, and has no need for anything above that. There are various user-level library routines that convert the time() value to assorted human-readable formats. Leap seconds are a feature of user-level code, not of the underlying system.
I've seen any number of cases where a project attempts to deal with time via higher-level data formats than the simple second counter. All have eventually failed, and reverted to the second counter, which just keeps ticking along and leaves the conversion to complex time/date "display" formats to Someone Else.
The one remaining problem is all the date formats that can't be reliably converted back to seconds. I keep running across dates like 10/8/12, for which it's utterly impossible to decide which field is the year, which is the day, and the other one must be the month. This often goes along with a time format that doesn't bother to include the time zone (or whether DST is in effect;-). But this is a social problem, not a technical one. The programmers understand that such formats aren't usable by the software, or even by humans in the near future.
(Actually, I've seen some hints that a "formatted" time is in use inside Macs, perhaps in OS X itself, or in a very low-level library. This would explain some time anomalies that have been observed in a few apps. I wouldn't be surprised if they'd done something like this, to go along with the way the kernel munges file names so that strcmp() says the name in the directory is not equal to the name passed to open() when the file was created, thus breaking a lot of software developed on other systems. Maybe some day it'll be found and fixed. Or maybe not.)