That said, I'm trying to get into Rails and Ruby and I'm in a similar boat as the friends you described. At work I'm a FileMaker developer, which might sound like amateur hour to the HN community. I'm very well aware of FileMakers shortcomings, but it also works quite well for our little non-tech company, which is why there is no immediate need to learn more advanced languages. Add to that outside my day job, I'm a musician/producer - this is a hobby as well as an occational source of income, but it takes time and there's only so much left when I get back home, which caused my drive to keep learning to behave more like an on/off relationship.
Nevertheless I try to hang on to it. Having experience with developer tools as well as audio production software and hardware, I have to agree with you - people interested in programing have everything they need readily available. Sure, it got a lot easier for musicians too, but usually a decent DAW, plugins or audio interfaces and monitors still require a financial investment, which certainly helps to remind you about your original goals. Meanwhile frameworks, editors and documentation are mostly free - combined with limited time and a lack of concrete need for your new knowledge, it can be tough.
However those reasons sound rather career- and money-centric. It's not all that rational though - I like making and creating things, whether it's music, software or design - but I value doing things right and with care. Learning a "proper" language/framework and being competent with it would help a lot and I'd consider it as essential.
Others have pointed out that making projects that are of interest to the person learning is also a key. I think combining both of those is perhaps the best solution.
For example:
Have them screw with the interface of their favorite websites: pick a greasemonkey script that already does anything on that site and change it to do something different.
Learn the macro/scripting interface of whatever productivity software they have some reason to use already and make it do something.
Find a game they like that has an active scripting or modding community, and fiddle with the game rules.
The idea is to make the mental leap that writing software is just another way of getting the computer to do what you want, and that there's one big continuum from poking buttons in a dialog box to amateur hour hacking to writing "proper" software. Eventually you'll have the ambition to do something that requires more than just plugging pieces together and making edits to stuff other people wrote, and that's when you'll be self-motivated to obtain the knowledge that will make you a more effective programmer.
I realize this is at a way more primitive level than most people think of as learning to program, but IMHO the CS 101 stuff where you learn a language and how to make simple programs from scratch is closer to the "middle" than the "beginning".