The only reason that it's not exposed publicly is because exposing it would require adding an additional option. You can put any HTML you want in your object's label and it should work without overriding the render method. However, if you want to build customized HTML based on a more complex object, you will need to override the render method. That's one of the things this demo is showing; raw data is coming in and being turned into markup, as opposed to just using the data that comes in which is the default behavior.
We haven't figured out how to document methods that can't be called normally, i.e., $( elem ).autocomplete( "renderItem" ), but will be maintained as public methods. We do plan to support _renderItem as a public method and consider any backward-incompatible changes to it to be as serious as a backward-incompatible change to anything that is part of the normal public API.