I can get the current Locale paper size using
GetLocaleStr(LCID,LOCALE_IPAPERSIZE,IntToStr(DMPAPER_A4))
where LOCALE_IPAPERSIZE = $100A
but is there a way to enumerate all paper sizes with their names?
There's no enumerator, see Paper Sizes on MSDN for a full list.
You can find out paper sizes that a particular installed printer supports, but that wouldn't possibly include all.