I have met and asked a couple of the JVM developers why there is still so much use of StringBuffer since they recommended people migrate to StringBuilder as a drop in replacement 8 years ago. I got the impression it not something which they have worried/thought about. There was no official reason from one of the product managers.
I think its up there with why the JDK source uses tabs when the Java Coding Convention (1999) suggested you should use spaces. The fix is trivial using a code formatter, but its not on anyones todo list.
IMHO StringBuffer was never a good idea to make multi-threaded in the first place. In the rare cases you might want to write to an in memory stream of characters in a multi-thread way and you didn't care how jumbled up the text it produced was, you can still use more natural alternatives like StringWriter (which wasn't available in Java 1.0) or synchronize a StringBuilder.
I believe it actually cased a lot of bugs e.g. SimpleDateFormat used it and still uses StringBuffer to some degree even though its not thread safe. It may have given some developers a false sense of security using a thread safe collection or looked sort of thread safe. i.e. Using StringBuffer rather than StringBuilder in multiple threads is more likely to pass simple tests even thought there might be a bug.
e.g. Consider two threads writing
sb.append("Hello ").append("World").append("\n");
The problem is that while each append is synchronized, each block of code is not. SO you can get
Hello Hello World World\n\n
or
Hello World Hello \nWorld\n
So StringBuffer is only thread safe without synchronization if you only use append once which makes it rather pointless.
I try to point out to people to switch when questions involving StringBuffer are posted on SO.