SDL_Quit() will clean up most (but not all!) objects created during use of the library (including windows, textures, etc). You aren’t required to clean up everything yourself, but it’s safe to do it, too (and often a good practice).
No, SDL_Quit() gets them all.
If the program exits, the OS will reclaim all allocated memory no matter what…however, there are some platforms where, if you changed the video mode of the display by making a fullscreen window, it might stay at the changed resolution if you don’t call SDL_Quit() to reset it.
There are some things that aren’t cleaned up by SDL_Quit(), like SDL_RWops objects. I don’t have a complete list. But most things–opened audio devices, created windows, renderers and textures, etc–are kept in lists internally and all will be closed during SDL_Quit() if the app didn’t do it already.
But everything (except the video mode on a handful of platforms) is closed, free’d, and otherwise disposed of when the process terminates, without SDL’s intervention, of course.