Thank you for replying StacyRandal.
I was starting to get the idea that I may not have a good way to fix this, but it is good to have a second opinion first.
I have tried those other refresh ideas already.
When using the GUI outside of the ArcMap environment the refresh command inside of ArcMap does not register changes in view extent, and does not register changes in Selections sets. The refresh command in ArcMap does register any changes that the GUI has made to the layer, but in order to make changes (correctly) the user should be able to see what they are changing first.
The refresh command in ArcCatalog does not seem to have any effect on the display in ArcMap.
Opening and closing the MXD has the same effect as using the refresh command in ArcMap. Display and Selection changes are not registered, but changes to the actual stored data in the layer are registered. I suppose I could force this method to work by replacing all lines of arcpy.RefreshActiveView() with mxd.save(), where mxd is my map document. I expect this would slow down the code, and as you mentioned, it would be inconvenient to the user.
The reason why I want the ArcMap screen to be enabled at the same time as the GUI script is so that users can augment the selection of polygons that are targeted for editing. The GUI is configured to handle each polygon individually, but when it makes changes they take effect on all selected items. In some (perhaps many) cases I expect the user to see places where their work would be sped up by having the ability to multi-select polygons for correction, rather than zooming to each of them individually. This is not accomplished by using the open/close/reopen method of refresh.
At this point I think it is probably best if I accept it, and if it really bothers me, then i should learn to program full fledged extension using arc objects.