SDL2 actually supports this natively. While it caused me some artifacts while rendering tile-based maps, it works pretty nicely with everything else. I'm not 100% sure on this, but I think SDL also automatically transforms for an example mouse coordinates to work with the scaling nicely.
So, to enable scaling, you only need to call
SDL_RenderSetLogicalSize(renderer, width, height); with the width and height values that you used to design the interface. SDL uses letterboxing for the scaling, however, so it will always keep everything in view.
While this might not be the optimal scaling method specifically for user interfaces, it is a quick and fast way to get your game resolution independent. You can continue developing the game while assuming the resolution is static, and SDL does everything else for you automatically. This is definitely something you should try out and see if it is good enough for your requirements.
Otherwise, as already pointed out, you could try out an actual UI framework.