What if the app is required to "do stuff" during the installation? Ex: informing a related app of its availability, writing an installation date for trial period expiration, etc. You need to do that with a script or auxiliary program, which is invoked at installation.
It would be much better if the application would take care of this on the first run (or a subsequent run if it is copied from a backup or other device). Restricting these things to only the installation phase makes App's less portable. Because you always need the installation file as well. On macOS pplications are bundled directories. So they are a single 'file' containing everything needed to get the App running (binaries, metadata, assets, etc). Using an installer on them is just an cumbersome antipattern adding useless steps to a process that could be a simple drag and drop.
This is not possible in a "chicken and egg" situation: My app is a plugin for a main app. The main app can't find me to launch me until I "seed" its directory with a pointer to me.
To make my app visible to the main app, I place a "cookie" in the main app's directory (not my design), which is done by the installer script. Without this, the main app will never find my app. And the user can't launch me until he sees me in the list of available plugins. Vicious circle.