Defining functions with an event listener inside?! Does this follow good programming practices?!

Yes, this is fine. There is no danger of going rogue the way it is used. They have added an additional abstraction to the already abstracted onEvent().

Fortunately, App Lab is based on Javascript.

function buttonChangeScreen(button,Screen){
  onEvent(button,"click",function(){
    setScreen(Screen);
  });
}

The innermost function definition creates something called a closure. It is an advanced concept, but here it makes the whole thing work correctly. See also Programming Concept onEvent, Functions and Event handlers, OnEvents as Functions then Functions inside of Functions. If your students have found this it is time to talk about closures.