it depends on the context... but maybe replace-regexp-in-string would be the right function to use for strings in this context.
Of course, a lot of the time buffers are really powerful tools to replace strings. I just don't think your original assertion of "almost never" is right. Buffers are handy but I use them to replace strings less than 50% of the time.