If we make working-directory a parameter, how will it work if I want to
change the directory relative to the current one?

(parameterize ((working-directory ".."))
    (working-directory) ;=> what will it return?
    (open-output-file "foo") ;=> what path will this resolve?
   )

If working-directory behaves just like a parameter, (working-directory) will
return "..", which doesn't give much info.  We can't just use it to resolve
pathnames for file API, so we have to keep track of absolute working directory
internally.

If we don't allow setting relative pathnames, it sure works, but it will be further
deviation from POSIX chdir() semantics.

(Gauche's current-directory always returns the absolute pathname, even set
with relative pathname.  So it does not work like a parameter.)