PMTiles is great for a static background. You can easily do a layer on top with geojson like you say, or even just by storing your own data in postgres and using postgis ST_AsMVT to turn it into a vector tile layer. Stick a cachebuster in the URL & a http cache in front and you can call it a day.