I think that there are really a few sub-questions here that are best addressed individually. Before I answer though, I will say that my degree is in CIS and is from a somewhat diploma-mill-ish school that didn't teach much in the way of CS theory, and so in terms of real CS I am mostly self taught. This is of course likely to bias my answer, so take the following with whatever amount of salt you think is appropriate.
The first sub-question I see is the question of whether theoretical CS knowledge is useful in the general practice of programming. The answer is yes, it is, although the extent to which it's useful depends a lot on what sort of programming you are doing. Even if you never need to implement a red black tree or hash map or write your own radix sort, knowing about them will still be useful. It doesn't really matter how many data structures and algorithms are implemented in your languages standard library if you don't know what data structures to look for, or when it's appropriate to use them.
The second question I see is the general question of whether a degree is useful for programming. Again, I would say the answer is yes- for two reasons. First, as others have pointed out, HR departments often use degree requirements as a first pass filter on applicants, and even when you can get hired without a degree you will generally have a hire burden of proof to show that you are competent than someone who doesn't have a degree. Second, regardless of what your degree is in, one of the most important skills you get from a bachelors degree at least is learning how to learn. Since programming requires constantly staying up to date with new technologies being able to learn quickly and effectively is a valuable skill, and having spent 4 years honing it will be useful.
The third question is, how important is it that a degree is in CS or a closely related field specifically. To that I would say it depends. It's certainly possible to learn CS theory independently, and if you spend enough time actively working to improve your software craft you're bound to pick up the most important bits along the way. The further away your degree is from a cs/math/engineering field the more foundational knowledge you will have to pick up along the way. Even if your degree is in some completely unrelated field you may find that it's easier to get past HR filters, however you are still likely to find that technical interviewers require a more substantial demonstration of your skills compared to someone with a CS or closely related degree.
Finally, the fourth part to your question as I read it is, what is the relative importance of theoretical to practical knowledge. I think that's a matter of comparing apples to steamrollers. Both are important in almost every job, but the relative importance will depend on the specifics of the job. Working in an R&D department is likely to be heavier on the CS side of things, writing CRUD web applications or internal billing apps is likely to be more heavily weighted toward the practical experience side of things, and fields like game development are going to require that you have a strong theoretical background and know how to write fast working code that ships yesterday.