Quote:
the C64 seems to use this for cassette I/O buffers
That's not quite right. The Commodore 8-bits have dedicated memory, not on the stack page, set aside for cassette buffers. They are popular places to stash short machine code programs.
Their BASIC interpreters do use a small portion of memory at the bottom of the stack while converting floating point numbers into text form. This is more-or-less protected; when the interpreter allocates stack space for a GOSUB call or a FOR loop it checks to make sure the pushed parameters will not overwrite that bottom portion. If there is not enough room, it fails with an "out of memory" error.