I am not - at least for the present - asserting copyright over this material. Feel free to re-use this information for your own purposes. Other pages reachable from this one may be subject to copyright by their authors.
It depends on the compiler. The original Modula-2 compilers, as described in Wirth's book "Programming in Modula-2", retained the old Pascal rule that function results had to be scalars or pointers. It appears, however, that Wirth has said that this was an implementation restriction rather than a rule of the language. Some compilers have kept the restriction, others have relaxed it. ISO Modula-2 does allow structured types - e.g. arrays or records - as function return types.
Because of run-time efficiency issues, it is probably not a good idea to write functions that return very large objects. However, there's nothing wrong, either in principle or in practice, with letting functions return small records, small arrays, etc.
If you have software that does use structured return types for functions, and you're trying to port it to a compiler that doesn't permit this, the solution is to convert the function into a proper procedure, and use a VAR parameter to return the result.
There's a program called mtc in the cocktail archive at Universität Karlsruhe. It's also available on several other German sites. I've never checked this one out properly, but it seems to have a good reputation. I believe that you need to fetch the file mtc.tar.Z, plus a couple of prerequisite files.
At last, they've arrived! Follow this link for information about compilers for OS/2.
It didn't quite happen the way I expected. The OS/2 compilers are from relatively new arrivals on the compiler-vendors scene. The familiar suppliers of the DOS Modula-2 compilers seem to have opted out of OS/2. There are still rumours floating around about TopSpeed and StonyBrook, but no hard evidence.