sysupgrade probably already does a lot of what you need. For example, it has a simple mechanism to keep any files or directories across updates. Have a look at the files in
/lib/upgrade/keep.d/, these list paths that must be preserved. You can simply put a file of your own there, listing the extra paths you need to be preserved (and usually, itself, to make sure it is also kept).
Also have a look at
-f option, which allows you to specify a
.tar.gz archive which should be applied after the upgrade. This can even be a remote url, so you can utilize that to automatically install some extra things on top of a standard update.
So even without a custom image, you can already do a lot just with sysupgrade.
But of course, a custom image gives you full control of the entire distribution. For anything you need to maintain for a longer time, I strongly recommend it (having done a dozen projects this way already myself). There is a learning curve, but once you've get a bit accustomed, OpenWrt is a clean and comfortable environment to maintain even complex projects.
You can easily organize the extra packages you need in a source feed of your own (just a git repo somewhere). Copy
feeds.conf and add your feed url there. Then you can use the
./scripts/feeds utility to install (=make available for building) those packages, and once that's done, the packages from your feed will be available for choosing via
make menuconfig, and including them into the firmware image at the next
Creating packages is not too complicated either, once you understand what it is: a meta-makefile describing a) where to get the source, b) what the depenencies are c) how to build, d) what build results or static files need to be copied where in the target system.
Fo simple packages you can omit a) and just include the sources into the package itself.
Now that's only a rough summary to give an overview. It's definitely worth digging in a bit, for example about the build system in general and creating packages. There's a lot more useful info in that wiki...