Eu não me lembro dos detalhes, mas acredito que isso tenha relação com as decisões lá no início da linguagem.
Bom eu lembro do seguinte:
No Delphi/Lazarus, o "Constructor" sim nesse caso...
Mas isso funciona com todos os métodos... Por exemplo, sua classe TPai poderia ter uma "procedure FooBar" e a TFilho também ter esse método. Eles não precisam ser necessariamente virtuais.
A natureza do "Constructor", é ser um método da Classe, não do Objeto. Sendo assim, é esperado ele ser chamado na classe...
Por exemplo o seguinte código gera uma AV:
var
umPai: TPai;
begin
umPai := umPai.Create;
//O código correto seria da classe:
umPai := TPai.Create;
Já no Destructor isso não acontece. Ninguém chama "TPai.Destroy".
Na verdade, se você notar seu código, você chamou o método "Free". Esse método "Free" não é virtual.
Isso não explica plenamente sua dúvida, mas dá uma ideia do funcionamento... ou pelo menos mais coisas pra você pesquisar