It's excellent that you managed to work and get an engineering degree.. but I'm not convinced this is something that can work on a large scale. Where did you live?
I knew a guy at UCSD who was trying to major in computer science while supporting himself. He was working about 30 hours a week in retail at a department store. San Diego is expensive, and just making ends meet can be a challenge for someone low on the pay scale, and he was trying to balance this with paying for tuition, books, a laptop, and so forth.
Now, add in the fact that he's trying to get good grades in data structures and algorithms, vector calc, physics, and a general education elective. He ended up dropping the data structures class.
Now, people drop that class for all kinds of reasons. But personally, I'd rather not see America's promising young minds struggling with a 30 hr a week retail job while taking a heavy course load of math, physics, and engineering. I've heard of students putting 20-30 hours a week into data structures alone. This can lead to 70+ hour weeks. It's character building, and some extraordinary people will succeed, but I think we need to recognize that this would knock many students with above average motivation, study habits, and intelligence out of the game.
Unfortunately, the answer for the "middle class" may be to target universities near home and stay with the parents. UCs are about 10K/yr now for in-state undergraduates. I think a student could swing that with moderate part time work and limited loans. This would come with its own kind of costs, though.