From your requirements SDL2 might be the best match. Because it is the minimal set of functionality that satisfies your requirements (or comes close to do so). You want it to be rather minimal to ensure the best possible reliability. The less stuff you depend on (that you don't need), the bigger your chance of being in control.
I know about SDL, and in fact that's what I've been using in my efforts at a prototype - but there is a massive amount of work to go from a low-level input and output library to something you can actually make playable games with.
Not really, all you initially need is a reasonable effort to wrap SDL just for gameloop, input, sprite rendering, and audio. Those are the main components that will get you started to go into any direction. The rest of the engine- or game-code is then rather game specific. If the design of this low-level architecture is posing a big hurdle to you, then you aren't ready for serious game-programming anyway.