What you need in a game engine is absolute optimization, but thats after...
1) Graphics rendering. Find out how those 2 can render graphics smoothly (consider buffering).
2) Window support (not the OS, but actual windows. Will the user have to make their own using another lib?)
3) Physics Depends on what 2D you want and the vector expansion. Of course always have a collision detection system.
4) Sprite batches
5)Map renderer. Very helpful, especially if you implement Tiled support
5) Algorithms to consider: Your A.I. for enemies, A* for path finding, spatial partitioning for your graphics, whatever physics you need.
6) U.I such as dialog boxes, inventory systems, menus, mini maps, health bar, collectables grid, etc.
7) Consider the user if youre going to deploy it. Simplicity, makes sense, well documented, plenty of examples.