Yes, as timothyjlaird stated, it's better to not start out with more than you can handle. Start out at a basic level, and add features as you learn them. Get into the habit of refactoring your code as you add new features; eventually you'll end up with a framework/engine that you can use and understand. Your code will expand as your game needs more features. This is the exact process I followed in developing Super Play.
I'm happy to tell you that I'm starting a new game development career as an indie game producer. I had done some games in the past, specially in Flash, but now I want to take this seriously and by that (and because I love since I learn it on my professional career) I want to use C++ as my main code programming.
Go a step above SFML (or SDL) and find a game engine that abstracts the hardware differences.
And now to push one on my projects on you.. Try my Super Play game engine (http://superplay.info/) to develop a game that doesn't directly relate to the system you are targeting.
Super Play supports Windows, Linux, Android, Ouya, GameStick, and iOS by pretending to be a SNES that was created in 2013.
What's the best way to structure a large game engine project?
It will take years (and many cross platform projects) to find a design you are happy with.
I have finally gotten to the point where I do not hate my code layout with my Super Play game engine (http://superplay.info/).
For me I keep my 'global' interface in a class called either System or Platform. I depend on the project include directories to supply the location of files i need. The engine needs certain files from the game, which are supplied by the game project in specific file names.
I wrote my first game on the ZX Spectrum some 29 years ago. My friends were busy swapping cassette games to try and beat each others' scores and I would borrow them to amaze myself at how they programmed it.
I then wrote several games on the Amiga, even publishing one on licenseware which had great magazine write ups (still got the Amiga Format mag somewhere).
Then onto PCs with a very early version of DirectX, which was mind-blowing compared to what I'd used before. Always self-taught in the early days, but now I just seek the assistance of the friendly experts on here. I work in an investment bank for my day job and it's nowhere near as much fun.
41 now and still tinkering with my engine and enjoying it as much, if not more, than when I was burying my head in the Amiga Hardware Reference manual trying to get a sideways scroller working in DevPac assembly in the early nineties.
For those younguns among you who think it's just a phase you'll grow out of.... It ain't!
I've followed about the same path, except for using a C-64 instead of the Spectrum. I used to copy pirated games to check out the demos I don't think I played most of them.
I also developed a few demos of my own, I loved raster (and later copper) effects. I also created a nearly complete BBS program that was similar to C-Net.
Later I moved onto the Amiga and developed a few demos, but was never able to put everything together into a game. The jump from the C-64 to the Amiga was a huge jump in understanding software and hardware.
I moved onto dos and 16 bit consoles, and created more elaborate demos. After reading a few books (Gardens of Imagination and some of the Andre Lamothe stuff) I started to grasp the big picture items needed to put a game together.
After getting a game development job, and moving to C++ as my primary language (everything before was assembly, and some initial basic stuff), I started focusing more on the form and function.
I also finally put together my own engine, and now I'm enjoying the experience of getting it to run on different platforms. Surprisingly enough, I don't hate the layout of the code. But, I've taken the time to refactor, when needed, or scrap something if it didn't work.