The real answer, which is alluded to in your post, is that the years requirement is simply a mechanism to reduce risk and blame for the person hiring you. There are a few things to consider in these situations:
1. He is already being interviewed despite satisfying the years experience requirement. This means they are willing to ignore that requirement. (or I misread this and he never made it to an interview)
2. All new hires have a ramp up period. This costs money and a failed hire can be costly.
3. A hiring manager (or whoever has the final say) is the person who will ultimately take the blame for any failed hire.
Considering the above, there is really only one question that needs to be satisfied in the mind of the employer for any "inexperienced" candidate to get a job:
- Is the risk of hiring this person lower than that of all other candidates?
When you try to answer that question, you get a clear understanding of where the years requirement fits in and how it effects the go/no go decision. So let's see what risk factors are normally vetted out during interviews:
1. Skills - Can he do the job? (the well roundedness part of the answer falls here) Let's make the assumption that he can so the answer is yes.
2. Personality - Does he fit in with the team? (conflict resolution and all that other stuff in the SO post falls into here) Let's make another assumption that he can so the answer is yes.
3. Will he flake out? - This is where experience factors in heavily. Evaluating someone with very little work history makes this impossibly hard to get correct. With longer resumes, it is easier to have high confidence in making this judgement. 3 years is generally enough time to see if the candidate either stayed with one company for a long time or stayed at 2 companies for a long time. This is usually a good indicator that the candidate worked out well and can be trusted to contribute in the long run. This is also why jumping too many jobs in a short period of time (or over a career) is generally considered a bad thing. It makes you a very high risk hire.
When you are asked personal questions (where do you see yourself in 5 years, what do you do in your free time, etc), this is where you are given a chance to alleviate their concerns. Questions about prior work experience are also used to vet out a candidate's flakiness. Even someone with tons of experience can fail this part of the interview in which case they would also get rejected. Low experience candidates are simply starting with a -10 buff.
So to answer the OP's questions:
1. How can I overcome the assumption that I do not have the skills required because I do not have the "right" number of years of experience?
He must minimize the "Will he flake out factor?" Either ace the "flake out" part of the interview OR show yourself to be so outstanding with regards to skills and/or personality that they ignore your potential flakiness. The best way to do this is via skills. You can't be just better than your peers. You must be better than your seniors. Either show this through outside work (personal projects, open source contributions, etc.) or by impressing them with your knowledge. Based on what the OP wrote, he seems capable but doesn't STAND OUT stand out. The personality route is also viable but that is much harder to swing unless you know people in the company already.
In the case he didn't even make it to an interview, then he must rely solely on displaying his skills via his resume. Outside projects and open source contributions with a personal website (or a link to code repos) is the best way to accomplish this. If his resume looks generic, then it's no wonder he didn't make it to an interview.
2. Are skills directly proportional to years of experience?
No. I know some people who have been programming since they were 10. Coming out of college, they clearly have outstanding skills but zero experience. But as stated above, this is not the real reason why he was rejected (he should actually ask for feedback assuming he made it to an interview round).