I only ever write 2D games. If I ever write a 3D game, I will use a (free or permissively licensed) engine in a heartbeat.
For 2D, however, engines, or more appropriately "game frameworks" in 2D world, aren't really worth it to me with one exception which i will discuss below. A 2D game framework on top of DirectX or OpenGL is just not that hard a thing to write yourself and doing so is very rewarding. Further, 3rd party game frameworks tend to be bloated due to the constraint placed upon them that they must try to handle the requirements of any 2d game imaginable. When you roll-your-own 2D game and have the whole thing sitting on top of just a graphics, audio and input abstraction layer, you can make the "game framework" portion of your game extremely lightweight (e.g. I don't need classes for parallax scrolling to write a tetris-style puzzle game) and when you start a new game you can take that code and extend it as needed or not extend it at all.
The exception I mentioned above is when there is a requirement for crossplatform-ness as in the case of developing for mobile devices and supporting both iOS and Android without rewriting your entire codebase. In this case -- especially when iOS is involved -- I do recommend using a 2D game framework. Writing your own cross-platform layer and getting it right is not an easy thing. But here, too, for me at least, the fact that I end up using a full game engine in this case rather than a lower-level hardware abstraction layer is really just an artifact of what is available for free (i.e. cocos2d-x) rather than what I would actually choose all things being equal.