The main purpose of Inno Setup Preprocessor (ISPP) is to automate compile-time tasks and avoid repetition in your scripts. For example, you can declare a compile-time preprocessor variable – containing your application name, for instance – and then use its value in several places of your script. If for some reason you need to change the name of your application, you'll have to change it only once in your script. Without the preprocessor, you would need to change all occurrences of your application name throughout the script.
Another example of using the preprocessor would be gathering version information from your application at compile-time by reading the version info of an EXE file, and using it in your AppVerName [Setup] section directive or anywhere else. Without the preprocessor, you would have to modify your script each time the version of your application changes.
The preprocessor can even scan your source folder and generate script lines for the found files. Without the preprocessor, you would have to manually maintain the list of files.
Conditional in- and exclusion of portions of script is also possible by using the preprocessor: you can create one single script for different versions/levels of your applications (for example, trial versus fully functional). Without the preprocessor, you would need multiple scripts.
Finally, the preprocessor makes it possible to split long lines using a line spanning symbol.
Note: the preprocessor works exclusively at compile-time, and has no run-time functionality.