Okay, upon further review of the source code. I think I might have an idea as to what might be causing the issue.
In your Run Script button procedure you are creating a new instance of the IDEEngine and IDEScripter every time the button is Clicked. But, you do not free the instance of the IDEEngine and IDEScripter when the code leaves the Run Script button procedure. Yes, you created the IDEEngine and IDEScripter with the owner being the Application. So the application should free the instances of IDEEngine and IDEScripter. But the problem is, the application will only do that when the application closes.
So, every time you click on the Run Script button you end up with an instance of IDEEngine and IDEScripter still in memory.
And even though you are freeing each instance of the TFScriptIDE form created when the Edit Script button is click. I suspect that for some reason the IDEEngine and IDEScript instance for each TFScriptIDE form created is staying in memory.
That is why you are seeing the IDEComponentComboBox showing the _4 appended to the form name. It is seeing each instance of the script in each instance of IDEEngine and IDEScripter that was created and then not freed.
I would suggest that you work with a single instance of IDEEngine and IDEScripter. If you are using a two form project like your test probject. Than I would have the instances of the IDEScripter and IDEScripter on the main form. And then set the additional Scripter IDE components that are on the seperate form to use that instance only.
You can look at the ScripterProIDE Demo project's Main.pas (under Demos) and the IDEDialog.pas & fIDEEditor.pas source code (under Source > IDE) to see how it can be done.