people need to understand the concepts of bits, bytes, words, longwords, binary/octal/hex numbers, thinking sequentially and logically, what an operating system actually does, what an IO system is and does, how a computer actually does math, etc., etc., etc.
No, they don't. Especially not at age 14. I live in a first world country, and none of those topics were covered before the final year of highschool (age 18) or the first few years of university. There's a good reason for that - most of those topics are completely useless unless you have something to actually apply them to. Having something to apply them to would require trying to teach C/C++ or assembler to your average 14 year old. That's just not going to end well.
I know at my university, most of the professors used PDF (LaTeXed) slides, or digital over-head projectors (as opposed to light-based, which requires those transparent plastic sheets). Other than that, this is fairly standard. That said, I've tended to have quite good professors so far, and most of them will use the whiteboard to show steps or diagrams, and they don't just read straight from the slides.
It's also rather useful in that all the lecture slides get posted to the course websites, so going back and reviewing the material is much easier, and means you can pay more attention in class than if you're scribbling notes hurriedly.
Nor is the U.S. led and controlled by a radically conservative theocracy with a demonstrated intent to export insurrection with the stated goal of complete domination.
True, however this has only been the case since the beginning of this year.
Having been in the situation of starting to program when I was about 15, I can say that there is almost certainly no 'perfect' language to start aspiring programmers off on. Indeed, I'm still kicking some of the bad habits I learnt from my first language (PHP), and I now do this professionally.
I'd say the best option is probably to try and learn/teach two languages side-by-side - preferably two that have completely different approaches to programming. The first should be something that allows one to easily learn the fundamental Computer-Science stuff - functions, lists, trees and recursion - and languages like Lisp, Scheme or Haskell - by their nature - lend themselves well, although C can also serve at a pinch.
The second should be some sort of practical/pragmatic programming language, that one can learn how actual everyday programming works in. I'd honestly stay away from Java or C for this - C is scary for actually *doing* stuff when you first start to program, and Java is overly complex. Run with something like Ruby or Python, which give you a good grounding in Object Orientation, and allow a newbie to actually accomplish something. You could also use PHP if the kid's into the Web, as a lot are these days (though make sure you still teach them the OO way of doing things, as opposed to purely procedural.
Once you've got those down, you can happily jump into languages like C/C++ and Java, and start making more than just the toys that all newbies make.
A large number of installed systems work by fiat. That is, they work by being declared to work. -- Anatol Holt