Well it isn't hard to implement. StringBuffer has an indexOf(String str, int start) and a replace(int start, int end, String str). You could implement a replaceAll yourself using those two (not using regexes).
Your assertion that StringBuffer is more efficient than String is incorrect. Suppose you have a string like "xxxxABCxxxxABCxxxx" and you want to replace "ABC" with "DEFGH". Since "DEFGH" is longer than "ABC", you will have to shift the rest of the contents over two spaces before each replacement. If you're working with long strings, that will be way too slow. It's much better to start with a new StringBuffer (or even better, a StringBuilder) and build the new string from scratch. That's how replace(), replaceAll(), trim(), concat(), and all the other "mutating" methods of String work. StringBuffer is not a mutable alernative to String, it's a tool for creating new Strings.