But I have to conclude that either "smart linking" doesn't exactly live up to its name, [...]
Smart-linking does what it's supposed to do: it links in only those functions that are (however remotely) used in the code but it doens't deal at all with constants, etc.
The problem here is not only that the initialization/finalization sections of some RTL units (the, let's say, "base" ones, at that) do use some code which, from your point of view (or anyone',s for that matter), does nothing for your program, but also uses a fair ammount of constants, most to initialize variables which, depending on the program, might never be used (format settings, day and month names, etc.) and which take their fair share of space in the binary.
The only thing you can do about it is what some small-systems programmers do: build your own tailored
system (and whatever others) unit.
But IMHO that's not very important, because one characteristic of Pascal programs (generally speaking) is that while the start relatively "fat", they grow comparatively slowly. On the other hand C programs (for example) can start rather lean (a few tens of KiB) but grow up very quickly with every feature you add to them, because each little thing you add to them frequently needs yet another
#include "somelib" for some functionality. So both programs (Pascal/C) end up at arround the same weight.
Which is why C programmers in the aforementioned small-systems never "printf" anything and, if they do, they use their own "just what I need and no more" printf. In other words: stripped down
system unit