I would not say that OSS is necessary step to become a good programmer. Many people became excellent masters of programming before open source was even popular. Github and other tools have made it easier than ever to collaborate on work, but you should in no way feel like you need to participate in open source to get some sort of programmer badge.

OSS is a very interesting model, but has some serious problems too. Much of the OSS world runs on nights and weekends (which alludes to what you said), and easily creates guilt for a lot of people.

I wouldn't worry about it. OSS progresses because many people are scratching their own itch and find it beneficial to try to get others to use it, either for personal marketing reasons or because it feels good. If it doesn't fit into your workflow you should not feed bad at all about it. In some ways, OSS is a very roundabout way to do things. It's often more efficient to develop tools just for yourself or your team, or learn from people directly around you, or just hack on super interesting stuff, blog about your results and leave it behind. There's a lot of overhead in OSS.

If you feel like you are challenging yourself over time, that's all you need!

EDIT:

I missed your very last question, about what other ways can you improve. I would say try to put yourself in a position where you are challenged and uncomfortable as much as you can. This means writing code in other languages, and trying to work with a library that you find intimidating. You will learn a lot just through that, and your mind will be open to a lot of new things.