У любого выбора при разработке языка есть свои причины, хотя они и не всегда очевидны.
В данном случае, к счастью, всё просто. Конструктор A(this.a) возвращает экземпляр класса A. Который не является экземпляром класса B. Возможность вызвать его для класса B подразумевает неявный Type Casting, который противоречит явности типов (soundness), которую декларирует и поддерживает Dart.
Система типов в PHP - странное явление, когда типизация "приделывается сбоку" к уже существующему языку, и неявный кастинг типов - меньшая из её проблем (а так же - неизбежное зло при таком подходе)