Engines typically include a collection of commonly used functions and systems wrapped together for your convenience, such as physics managers and easy-to-use audio and graphics systems. A good engine can save you a lot of work, but sometimes you just want lower-level control so you can do something weird. Either way is fine.
You're probably best off learning C++, then picking up a common engine such as SDL and using that to get used to the design patterns used in game programming. If you start to feel like the engine you're using is holding you back, that's just a signal to start learning the lower level systems. That's not to say that you're switching from one to another. It just means that you're adding more tools to your toolkit. Even if you understand how to do everything without an engine, an engine can still save you a lot of time and effort, provided it's capable of doing what you need.
Another advantage of using a widely distributed code-base is that thousands of other people have been using it, so obvious bugs are more likely to have been dealt with already. If you roll your own then you end up having to do your own debugging.