Generally, functions should encapsulate a key task or idea in the program. When working with Karel, if Karel needs to build a tower, a function would be a great way to organize all the code needed to build a tower into a single coherent block. It sounds like your student has the right idea -- breaking a problem down into steps and building functions to tackle each part is a very good approach to develop and one that we encourage on CodeHS.
But it can be taken too far -- for example, wrapping a single command like
putBall() into its own function is probably not the best idea.
It all comes down to readability. If we only cared about efficiency, we'd write in binary 1s and 0s, since that'd be easy for a computer. Rather than focusing on writing as few lines as possible, it's usually better to focus on creating code that is organized and easy for humans to read. In fact, sometimes you may write code that is longer than it technically needs to be just to keep it easy for others to read.