>>Что помешало разработчикам безопасно обработать сообщение незнаю.
Не порите чушь уважаемый. вызывать деструктор объекта внутри метода этогоже объекта - глупо и противоречит принципам ООП. Перекрестясь это еще можно сделать в какомнибудь своем классе, когда сам контролируешь цепочку вызовов до деструктора, и особенно после. Но толко перекрестясь - через какоето время разработки эта цепочка поменяется, появится вызов виртуального метода или доступ к данным класса после вызова деструктора и приехали.
Вы в курсе какая куча методов вызывается до Button.onclick и какая после? А под разными виджсетами? Я не в курсе, и поэтому понимаю что так делать нельзя. Если приспичило сделать подобное - нужно использовать чтото асинхронное, например http://wiki.freepascal.org/Asynchronous_Calls