In high school I spent a lot of time learning tools but never really made anything with them. I must have started 50 games, but would always throw them away at 300 lines of code because they were not interesting anymore. One time I got the idea to make a Flash cartoon website like HomestarRunner.com. I learned the Flash IDE, and the time that I started to get good at it was when I started losing interest.
In college I discovered that there are better tools out there than the ones I had been using. I traded Windows and Gamemaker for Linux and Python. I still never finished anything, because I kept finding new and better languages. For a while there I tried out almost every popular language there is, including Haskell and Erlang.
Once my friends and I decided to make a game, and as the "lead programmer" on the team, I wanted to use the best language there is for making games. I started on Python, then switched to Perl (yes, Perl for games!), then C (because the others were "too slow") and finally back to Python because C was too hard.
Some things that I have noticed include:
-Perfectionism is a nasty beast. Are you a perfectionist too? I will go back and forth between things because I want to find The Optimal Way (TM), but after a certain point you can't really find a better way that helps more than the cost of changing. My dad, a mathmatician, once told me, "Life is not an optimization problem." I am coming to see that he is right.
-You mention that you do well in college even if you can't stay focused on your own projects. I have found that true for myself as well. I think the structure helps to keep us on track. Personal projects and side hobbies have no inherent structure, and all it takes to give up is to just stop working on them. I have found success when my hobbies and side projects intersect with each other. I finished a Flash animation when it was for a class project. I actually did learn a Haskell for Great Good when I made my senior research project "An Investigation of Lesser-Known Programming Languages." Then learning Haskell was not just a thing that might be cool but rather a school project that I had to finish. I recently finished a three year long programming project with a professor advising me. I wanted to quit several times, even though it was a great project, but my advisor half convinced/half forced me to stick with it, and I am glad that he did now that it is done. If something like school motivates you, then use that to your advantage!
-The biggest thing that gives me motivation to do anything is the people who will benefit from it. After thinking long and hard about the meaning of life, I have come to decide that love is what is most important. As such, I can turn away from the most interesting project in the world if I am just working on it for myself, but if I know that people are really going to benefit from it, that provides motivation. I think of all of the times that I have failed to complete a side project like a game or Flash website, I failed because they weren't really helping anyone, and as such they weren't really worth doing to me.
So, I suggest that once you leave college, find a lean startup that fulfills a need you care about. Maybe you wouldn't do well founding a startup, but you could work as an employee at one. Then you have structure similar to what you have in school, only this time with an employer, but you don't waste away at $BIG-CO. (I too have this dread of $BIG-CO!)
Do note that knowing a lot about a little does give you some unique advantages. If you ever do need to really learn something for a job or school project, it will be much easier than if you knew nothing about a subject. You are also more aware of what tools are available for various projects, and you can select the right tool for the right job.
As a final thought, I notice that you have been registered for 250 days or so and have 5 karma. That is almost the same as me. I usually don't say anything because I don't feel like I have anything to add, but I've been trying to comment more recently. Lurking allows me to just be a passive observer, but I take in less when I'm actually invested enough to comment.
If you'd like to talk, send me an email. Info's in my profile if you are interested.