As for dix-huit and dix-neuf, the Romans counted down from twenty; duodeviginti (two-down-from-twenty) is eighteen and undeviginti (one-down-from-twenty).
So it probably made more sense to the early French to say dis-huit and dix-neuf instead.
But one interesting thing about French numbers that you have missed is that it possess a vestigial remnant of the vigesimal (base-20) number system of the Celtics, where 80 is quatre-vignts (four-twentys) to the French, and 90 is quatre-vignts-dix.