どちらか、では無く、ラベルはブロックと文の両方に付けられるようにすればいいのでは?
プラスして関数名でも break/retry可能にしておけば特に困らない気が。
( 関数名でbreakできるなら戻り値はresult変数で… ←まだ言うか )

そのブロックですけど、Ada式だと全ての制御文が end XXX; で終わるので、
C/Pascal式の「{ }で囲ったところが単文扱い」では無く
「{ } も含めて制御文の構文」となって、{ } は強制でかつ「ひとつの制御文に一組だけ」になりますね。
>>288とは逆になりますが、こちらの方がぶら下がりelse(catchも?)問題が無く安心できます。

if( ... ) { ... else if ( ... ) ... else ... };
try { ... catch( ... ) ... };

しかしこれだと開始の { が冗長なので、Adaの方が(タイプ量は別にして)スマートに思えて来ます…。

if ... then ... elsif ... else ... end if;
begin ... exception when ... => ... end;