Ну, самый очевидный ответ: потому что это указано в спецификации, см. Часть 6.20 справочника scala. Но почему это так задумано, действительно очень интересный вопрос. Я подозреваю, что это связано с тем, что компилятор не может предсказать, что выражение будет последним, так как return меняет поток выполнения.
EDIT:
Подумайте, не требуется ли для возврата явный тип возврата, следующий код:
def bar() = {
if(guard())
return "SS"
else if(gurard1())
return true
2
}
что должен иметь тип возвращаемого значения в этой ситуации? Ну, есть вариант с наиболее распространенным супертипом, но я думаю, что это заставит нас возвращать Any во многих случаях. Ну, это только мои мысли, которые могут быть совершенно неверными =)