I can suggest an alternative workflow that, while not necessarily easier than closing and opening QGIS each time, might make more sense:
- Import your shapefile into spatialite
- Import the CSV into spatialite (using the "Virtual TXT/CSV option)
- Create a spatial view in spatialite by JOINing the spatial table (shapefile) to the virtual CSV table
Now, You can display the view in QGIS just like any spatial layer, and use the JOINed values from spatialite.
But, each time the CSV is recreated, you will need to DROP the virtual CSV table, and re-link to it. Then a refresh in QGIS will show the new values. THis only takes a moment, and what's more, you can define many views, and keep the previous ones around if needed...