Taking it a step further, the next hardest thing is dealing with the consequences of the lies when there are students with enough experience to know that you lied, but not why you lied.
I teach programming through video courses, and at a very beginner level, you have to lie a lot, in order to simplify the concepts that are peripheral to the core concept you are trying to explain. There are few things (if any) in the world that can be explained linearly. The dependency graph for any concept you want to teach will branch out into a dozen other topics, and often cycle back on itself.
The way you have to teach is pick a core concept you want your student to learn, and do your best to explain it, and whenever an unexplained concept comes up, explain it the simplest way you can so you don't get knocked off track. Often this involves lying, or creating the simplest mental model that works for the current situation.
I'll get emails routinely from people who say that I didn't thoroughly explain some topic that was not the core topic of the exercise. For instance if you want to learn about JavaScript strings, you may want to mention "string".toUpperCase(), but if you are just learning about strings, functions or method invocations are some way off in the future. You can't just stop and explain the details of functions, how they are invoked on objects if you are still working on the basics of a core data type.
So the hardest thing is not just knowing when to lie, but how to lie in a way that won't cause too much upset if the student knows you are lying. The best way to mitigate this is to explain that it is a simplification, and we will learn more about it soon. This is usually enough to keep going, as well as keep interest levels high.