Just like you can rename identifiers (entity names, I/O/local variables, etc.) and have all their usages throughout the code be renamed instantly (from the point of view of the developer), identifier value changes (i.e., changes in variables, aggregates, etc.) could also be tracked when an action finishes on the same screen.
When this is the case, any parts of the screen that were rendered with variables, aggregates, etc. that were changed in the action should be AJAX-refreshed automatically. Aggregates refresh automatically if the primary keys that were changed are now on screen / are in the scope of the aggregate.
Tracking could occur either with a "dirty" flag for each variable/aggregate, or be performed after the action finishes on the same screen, comparing all screen widgets' variables'/aggregates' current values with the new values after the action finished (a bit like AngularJS v1 did).
I'm sure this is not as trivial as what I'm spelling out here, but this is the basic idea.
Eliminating these two ("Refresh Data" and "Ajax Refresh") would (IMHO) remove another roadblock for the "citizen developer" who will likely not be accustomed to being alert to disparate display/data refreshing requirements.