How do I solidify my SQL Server / T-SQL Knowledge? I am a C# developer and not a database admin, but I have been using SQL Server for application developnment for over 4 years now and was really interested in getting a more complete understanding, and filling the gaps in my knowledge.

I read the training kit and passed the 70-461 exam today, learnt a ton of things from that book which I had not known or used before.

My question is, I would like to become proficient in all of what I have learn't, so that I know it like the back of my hand. It seems like I can see the correct answers from a list of choices but writing the T-SQL from scratch is a challenge.

How would I go about doing that? Keeping in mind the developer jobs will always use a small subset of the functions, is there any way I can practice everything, and become better at it instead of forgetting everything I have just learnt?
There are probably a thousand good answers here and only some of them will apply to your learning style and situation. If you were able to read the 70-461 book and then use it to immediately pass the test, then you've already got a pretty good foundation. The question really becomes, what is your personal learning style and which methods apply to your learning style?

For me personally, I tend to read about a new concept and then try to apply it as soon as possible. Let's say for example that I have read about Window functions in the 70-461 book. The concepts are abstract and hazy at first and the words accompanying the explanation make sense but they don't have any solid value in my bank of experience. What I will try to imagine is a single scenario in which a Window function would be useful. 

Sometimes I think back to my early days of writing SQL and wonder if I could have applied a better technique such as a Window function. Sometimes I'll actually dig up old queries and rewrite them. I will spend a lot of time comparing the results of the old query and the new query and the performance metadata. Some questions I will ask myself are: Was I able to perform the same task quicker and with fewer resources? 

Also, one of my favorite techniques is to imagine a problem and try to solve it in at least 3 different ways. Let's say I need to create a time series comparing one year of traffic data to the previous year of traffic data. It turns out that there are at least 3 (maybe 4) ways to do this. Some are faster, some are slower, some are easier to write. I will try to master them all and understand them all. I never feel completely satisfied with a query. I will always leave open the possibility that I can improve upon a prior technique. 

Another method I like to use is to find some old iterative code involving queries (something that runs a query 20000 times in a loop) and then try to come up with a set-based method for  producing the same results. Like you, I started out as an imperative language programmer and stumbled upon sets later in life. I didn't have a framework for how to work with sets and now I do. At work, I often run across old stored procedures that have 1000 lines of code using lots of materialized tables and loops. What I like to do is reduce them down to a single query of 100 lines. I don't know how much that will help you, but trying to re-solve old problems tends to enrich my learning experience. 

As for administration itself -- I can only recommend that you download the virtual machine for the Windows Server trial edition and install the trial or CTP SQL Server editions over and over again and in as many ways as you possibly can. You might have to learn a lot more about Windows administration than you ever hoped possible, but that's the life of a Production DBA. 

As for SSIS and SSAS and SSRS -- it's challenging to come up with imagined scenarios for those. There are probably a ton of packages out there for the AdventureWorks and other sample databases that you can play with. I find for those that it's extremely helpful to go through online tutorials. Try Microsoft's Virtual Academy or lynda.com to get started or even YouTube has a million video tutorials.

To answer your secondary question, how to prevent forgetting ... Reinforce those neural pathways in your brain by returning to them over and over. Every time your spark a synapse it'll get stronger and the memory of the process will become more focused/permanent. Try to learn as much as you can, as holistically as you can, with as much context as you can and keep applying it as often as you can. 

PS, I was a teacher for 4 years and I took many pedagogy courses to specifically understand learning techniques and styles. The best learning environment is probably a low stress, contextual environment that tolerates mistakes -- i.e., a sandbox. So build yourself a sandbox where you can play and make as many mistakes as necessary.