I see you've already accepted a great answer, but I'd like to give my knee-jerk reactions to your questions directly.
What I'm trying to ask here is, how do I get my mindset to their level?
In this question here we were talking about how to teach binary to 6-8 year-olds. What I said there I think touches on this question (I said a lot and am not going to repeat it here).
Very generally, what I do is assume nothing as far as previous knowledge and I especially try to keep things very goal/task focused, meaning, discussing what we want the computer to do, and the higher level ideas of how the computer does it. I only break things down into something more technical and specific when needed.
Language is especially important! Only introduce one term at a time and explain them thoroughly each time you add a new word to the jargon you want someone to understand. It actually helps to know, and use often, other (preferably simpler) terms while explaining an idea. For example, a variable is a "labeled box", or a "small dry erase board". A function is a "list of instructions". This actually brings me to your next question:
They struggle with understanding what a variable is, have trouble understanding flow of the program. What can I demonstrate to make them understand better?
Use as many real-world objects and analogies as possible. As I said above, variables are labeled boxes, cubbies, white boards, or any other object that holds information and can be emptied and refilled. Functions are just lists, and things like if statements can be thought of as "splits in a road" of instructions (or steps) your program is following.
I found it really useful when couching in college to use office workers (or any person doing any job) to represent objects and behaviors within a program. Personifying parts of a program can really help a lot in explaining how they work together.
... if it becomes a discussion about tracking the level of a game or the current high score ... -- Peter
It needs to be fun, and games really help. -- Edwin
Like the other responders, I find that visual and game-related applications ... will get and keep attention better than learning the "traditional" way ... -- Matthew
I really like all the talk of having kids make games in order to learn programming. When I was 14 and first learning C++ I made lots of little games too. I'd like to caution not to lose focus though. Regardless of what kind of program is being made that doesn't change how the teaching itself, the careful explanation of ideas, needs to be done. Please, make the packaging colorful and interesting, but keep in mind that concepts build on each other and need to be addressed in an order that makes sense and keeps questions flowing naturally.