Definitely nothing related to "Delphi compatible" because Delphi does not have this option.
It is easy to fix (however, requires recompilation of the FCL): Open the file dati.inc in folder (fpc)/rtl/objpas/sysutls, find procedure DateTimeToString and the nested procedure StoreFormat. In the large "case Token of" find the cases 'H', 'N', and 'S'. They always begin with
if isInterval then
StoreInt(Hour + trunc(abs(DateTime))*24, 0) // <--- Replace the "0" by "Count"
(this is for 'H', but 'N' and 'S' are similar. The last parameter, 0, of the StoreInt call should be replaced by 'Count' which is the number of H, N or S in the format string.
Is this a bug? Looks like...
Or is it intentional? An argument could be that your format string can contain as many 'H' as you want, and the output string will have as many digits for the hours as you like. But maybe at some time in the future, the function may be extended to 'D', days, -- in this case the function FormatDateTime will allow two meanings for 'DDDD': in the normal format strings it will be the long weekday name, but in the interval case it will mean "four-digit days". This could lead to some confusion, and maybe this was the reason why no leading zeros were allowed here. I don't know...