>Is difftime() required to know about leap seconds and provide an accurate
No. It's not required, and most hosts don't do it.
Arguably, POSIX.1 forbids it.
Yes, quite, except that I would have said "INarguably, POSIX.1 forbids it."
Isn't that a bit like the famous Indiana State Legislature and pi incident?
The truth is that there are occasionally 86401 seconds in a day, and even
more rarely 86402 [Though I have never seen a double leap second, it is
supposed to be allowed].
 Also mandated by international standards bodies, specifically
coordinated universal time (UCT) mandates this.
The "double leap second" is complete nonsense. It never existed outside the
ANSI C standard and never will. It was introduced by the ANSI C 89 committee
to document its problems understanding UTC issues. Someone heard that there
are two prefered dates for leap seconds per year and this got munched up to
the false rumour that UTC days can be up to 86402 seconds long. The
definition of UTC, which requires that |UTC-UT1| < 0.9 s all the time,
obviously makes double leap seconds mathematically impossible.
Highly recommended reading:
Original references (the official UTC definition and an excellent
paper about UTC):
Detailed proposal for a C API that handles leap seconds correctly (and
fixes many other problems in <time.h>):