It's now possible for a function to do something, then check a pointer to an event. If the pointer is null, the library performs some default processing. If the pointer is not null, the library calls the event and lets you specify something different. A closure and a function pointer are used in exactly the same way. The only difference is that the closure contains a pointer to the method and a this pointer to the object the method belongs to.
Properties are primarily variables with persistent storage .
They replace hard coded constants. They often have global variables that you set, or functions that you call, with parameters that affect the behavior of other functions in the library. Properties replace all that - you can set them from the Object Inspector at design time instead of hard coding them as constants. It's a bit baffling because the VCL's TApplication class has all the code hidden inside - but it's not complicated. Each message is a response to an event - such as clicking on a button.