Customization with custom apps

We do customization in ERPNext at every level without custom apps, such as:

  1. Form customizations
  2. Changes in aesthetics, icons, logos etc.
  3. Client Scripts
  4. Server Scripts
  5. Changes in core js files
  6. Changes in core Python files

Now, I want to customize ERPNext with custom apps so that it would be easy to upgrade the ERPNext version.

Kindly guide me on, at what levels we can customize ERPNext using the custom app. Are there any limitations for customizations to the custom apps?