Optional return values work in Scheme too (e.g. consider call-with-values + case-lambda, ignore values you are not interested in). I
The issue is that if the API allows variable number of return values, you always need to handle it
in the receiving side.
That differs from CL where you can bind the minimum number of possible return values with the
typical binding constructs and the rest will be silently ignored.
Say, you know your favorite implementation's srfi-234 only returns one value. Receiving the single result works with it.
(let ((r (topological-sort ...)))
...)
But that's not portable, for some other implementation's topological-sort may return 3 values and it causes an error. You have to write 'dispatch by the number of returned values' for every call to topological-sort. I guess many would write a wrapper to simplify the code. That indicates it isn't a good API design.