The advice you've been given is very on-point and helpful though, and you would do well to take it on board. That being said, I'll have a go at responding to your original question myself and hopefully expanding a little more on what has been said.
I feel that most of these answers here are not specific to the entirety of my question's purpose, or what I wanted to hear.
Absolutely! It's one that will mean less and less to you as you gain more experience, and which a lot of more experienced developers may have even completely forgotten the joys of, but when you're first starting out it's a huge achievement to get an image on-screen and responding to input, and this is the basic foundation of all the games you'll end up building. You should definitely be proud of it, especially if you did everything yourself without using references. That being said -- and as everyone else has already covered -- this isn't necessarily an ideal approach, and there's absolutely no reason to avoid using any reference materials available to you.
is getting an image blitted, capable of taking input, understanding the very most basic concepts of SDL, along with some C++, an achievement?
Programming is all about solving problems, so it's a good idea to try to figure out the actual game logic yourself, but you should feel free to look up reference materials for C++ syntax, SDL functions, etc., and there's also no shame in getting help with the game logic if you run into a roadblock. Over time you'll find yourself able to do more and more from memory, you'll learn which functionality can simply be re-used rather than re-writing it, and you'll refer to references much less, or for more complicated things.
This comes with practice and experience! You'll learn what works and how to approach certain problems by creating programs and experiencing first-hand what does and doesn't work, as well as what works but could be improved.
Any ideas on how you managed to just "get it" all as well, and be able to independently structure a game without reference to some key aspects, self-implementation techniques you learned, maybe something else?
It seems to me like you're on the right track, and you should do just fine if you continue writing gradually more complex programs and spending the time to learn along the way. Don't be afraid of making mistakes -- they're an excellent learning experience as long as you take the time to understand why an approach didn't work and what you can do instead.
Practice, practice, practice.
Does that help at all?