Теперь стало понятным в полной мере основное требование "assignment compatible", которое касается в т.ч. и return (Oberon не применяю и не обращал внимание на такие особенности) -- из report-а о языке:
Цитата:
Appendix A: Definition of Terms
[...]
Assignment compatible
An expression e of type Te is assignment compatible with a variable v of type Tv if one of the
following conditions hold:
1. Te and Tv are equal and neither abstract, extensible, or limited record nor open array types;
[...]
И как я понимаю, изначально в Oberon-семействе все record-ы были расширяемые и позже в КП появились extensible-декларации с разделением методики типов, а ограничения для return исторически не изменились (при которых и статические массивы были забанены за компанию).
И, если не ошибаюсь (и просьба поправить в случае чего), вроде как имеются ещё и заморочки со структурной эквивалентностью вида:
VAR a: ARRAY 10 OF INTEGER;
VAR b: ARRAY 10 OF INTEGER;
Переменные a и b считаются разных типов, и не прокатит присваивание аля "a := b". Необходимо объявлять переменные вместе под единым типом ("VAR a, b: ..."), или объявлять тип отдельно с последующим применением. Если разрешить возвращать по значению всё то, что уже имеет разрешение для копирования, то для удобства напрашивается некий марафет имеющихся шероховатостей в языке.