Really, it’s because of the habit of Ruby programs to pass a single options (params, args, config) object in to avoid complex configuration.
Really, what’s needed is separation of concerns, instead of a single “do stuff” function that takes an “everything” argument.
But what’s really wanted is global variables with everything is a single scope.