Is it possible to adjust the actual value for rows and columns for the OS without the need for reimplementing the CHROUT function?
Simple Answer:
No, you need to write a 'driver' and have it hooked.
Background:
While the Kernal does have attempts to support size independent operation, like with the SCREEN call at $FFED, returning screen size in X/Y to applications to adapt, all internal functions use hard coded values of 22/23.
How-to:
Hook the CHROUT vector (#10 at $0326) and, check in your driver if the current output (at $9A) is the screen (#3), if yes, do your thing, if no, continue with the original vector.
For a clean install it is a good idea to use the vector copy function at $FF8D to first copy the original vector table ($20 bytes) to some place in your memory (X/Y=address, CY set), then move the existing vector to your code (the exiting jump for not screen condition), then modify the table entry (Table+18/19) and finally move it back using the vector copy function (X/Y=address, CY cleared).
Caveat: This will only let program output use your driver and obey whatever new margins there are. The program editor will still work with its build in 22/23 values.
And while it would be nice to intercept $FFED as well, it isn't possible. So all programs checking for screen size will still see a 22/23 sized screen.
So, if someone wants to write an improved ROM, this would be one point to take care of :))
P.S.: All mentioned calls work on all Kernals on VC20, C64 Family (C64, C128, C65) and TED Family (C16, C116, Plus/4) and are assigned the same addresses. They don't exist, or have different addresses on PET/PET II family computers.