I think a good engine is something that allow someone not that skilled in programming to make a good game/software really easily.
And also that make it easy to a non-programmer (artist) to integrate their content into the software.
I am now also striving to do my own engine, but in HTML5 / WebGL / JS. Why? Because C/C++ is pratically taken by Unity, Unreal and CryEngine. Also you forcefully need to use the best algorithms and patterns to speedup stuff, so it is a good challenge. For what I experienced now, I think what is obligatory to offer a good starting point is:
- Wrap Graphics calls so the user do not need to manage them (he do not need to manage buffer ids, pointers, shader compilation,...)
- So create "Mesh" "Texture2D" "Shader" "Material" and classes that handle this stuff for him.
- The ideal pattern would be the user creating a Camera and the object and it would be already in the screen.
- Offer Initialization, Update, PhysicsUpdate (constant delta time), Destroy callbacks with a set of usefull data at the user hand;
- Handle creation and destruction of stuff so the user can avoid pointer handling.
- Useful data == Time.deltaTime, Input.GetKey(...), Time.elapsed, Time.physicsDeltaTime, ...
- Mesh loading from popular formats (Collada == XML wich is more easy) or FBX wich is more complex but can embed mesh and texture data.
- Animations (Skining / Bones) curve based interpolation of data.
- Physics, you can plug PhysX using C/C++ or C#. I will not even tell you to do one because it is an engine on its own.
- But at least should have rigidbodies, collisions with/without real interaction, raycasting, ...
- Sound (we tend to forget that)
- Post Processing effects (put your render in a buffer and render again in a plane to apply Image Effects like blur)
So never forget that an engine isn't just about rendering. It can cover from low-level to hi-level stuff.
You should cover the Core (initialization, update, render, destroy), Rendering, Sound, Physics, Resouces (Mesh, Texture, ...) sections very well to make it easy to use.