Disable any set-on-boot settings that could be problematic with a new ROM/Kernel (for instance Kernel settings, themes etc).
Backup your apps and data with your backup app (Titanium or the like). This is not strictly necessary as part of the procedure, but acts as a second backup, just in case.
Boot into your custom recovery and make a Nandroid backup of your entire phone. You should do this before every ROM update anyway, and it is especially important here, as you’re later going to restore the data partition from this backup.
Now while in custom recovery, clean flash your new ROM update (factory reset/cache wipe first) - flash any kernel or Gapps as well.
Boot into Android and setup Gapps (if Gapps asks to restore your phone, you can answer no - why use the time and bandwidth to download apps again, when you can use this method?). You now have a freshly installed new system with basic Gapps settings, done as you would with any other ROM update. And now comes the good part...
Boot back into your custom recovery, and clear caches again. From backup/restore, do an advanced restore to restore only your data partition.
Boot back into Android. You will now get the screen “Android is upgrading”, while it initializes all you previous apps.