OGRE actually isn't a game engine...it's a layer of abstraction between OpenGL/Direct3D graphics routines.
Are you asking for a "point in the right direction" regarding designing an engine or a good engine to use? Fortunately, I haven't had to make too many engines from scatch (I've always kept re-usability in mind)...but when I have had to do it, I generally try and think about the types of mechanics I'll be presenting first. I find it helpful to try and categorize things by what is unique, and what is fairly standard. I then start off with the basic/standard stuff, and keep in mind my unique, more difficult requirements while building from the ground up.
I have also found it helpful to utilize inheritance a lot while designing. For example, you may find that when dealing with lighting, it's easiest to incorporate a generic "Light" class, and build from that. This way, your other concepts don't have to be aware of every type of light you have in the game to stay flexible for your ever-changing needs. All it needs to know is there is some "Light" that's acting on it...not a spot light AND/OR a lamp light. Sometimes it's helpful, sometimes not. Just depends on the project
Other than that, I would just say start small, then iterate through it time and time again as you add more functionality. Although it's more efficient to get a solid design first, then build on that foundation, don't get discouraged if you have to go back to the drawing board a few times. You'll find you learn a ton along the way.