There is a principle that makes you do this but it doesn’t say it the way your professor did.
Every function orchestrates other functions. Even adding two numbers together and assigning them to a variable is orchestrating functions. This you can twist yourself in knots thinking this way.
The single level of abstraction principal holds up spirit of that idea but doesn’t require you to pretend you know where the bottom is. It only requires that you set a level of abstraction and stick with it.
That means this is not structural. It’s conceptual. It doesn’t matter if you mix functions from your own code, a library, or even the basic language functions.
What matters is that when you mix them together they don’t yo-yo your brain up to hand waving high abstraction and down to low level details all within the same function.
Like most things doing this comes at a cost. Keeping to one level of abstraction requires you to come up with names for functions. Names that hide lower level details. Names that are consistent with level of abstraction of the code that calls them. It's a pain to write. But it makes code easy to read. And code is read far more often then it is written.
Follow this principle and you’ll end up separating orchestrating and doing just fine.