What is the history of this class? Why there is createInstanceImpl method?
It goes all way back to 1999 with Steve (sinbad) trying out the latest OOP (Object Oriented Programming) trends. Hence OGRE (OGRE was actually O-OGRE which means Object-Oriented Graphics Rendering Engine). It's like Java where instances are created through factories.
It used to be way worse before the OgreNext refactor.
It is indeed overkill. I honestly forget it's there.
There are many issues with object creation. Ideally (if I were to write this from scratch), we'd want users to be able to create objects from any thread; and once it's loaded the object would "join" the "scene" and only that join method needs to be thread safe.
Probably once an object becomes part of a scene, all objects in that scene must be manipulated in the same thread. But before joining the scene? Object creation should be possible from any thread.
However Ogre/OgreNext's design prevents this in many ways (another issue is that some of the older APIs like OpenGL and D3D11, but specially OpenGL, make this incredibly difficult).