So the only consistent way I've found to update an image sequence through scripting is to replace it's path with it's current path since refreshMedia() doesn't look for new or missing frames :
projectItem.changeMediaPath(projectItem.getMediaPath());
The drawback to this method, is that it resets all the interpret settings, most importantly frame rate. I tried to set the FPS in metadata (Column.Intrinsic.MediaTimebase) to the original frame rate after the update, but this hasn't worked, and from other discussions I don't think it's possible this way.
Only fix for this is to make sure "Indeterminate Media Timebase" is set to the desired frame rate in Preferences, but I'm looking for a more solid solution. Can anyone recommend a better solution?