It looks like QFormBuilder/QUiLoader needs the plugin path to contain the *Plugin.dll file. The current implementation has C:\Program Files\Slicer 4.10.0\bin\designer and C:\Program Files\Slicer 4.10.0\lib\QtPlugins\designer in the path.
Two potential solutions are to extend slicer.util.loadUI(filePath) to also accept additional plugin directories, or to copy all *Plugin.dll files from an extension into the above folders, or to intelligently add an extensions QtPlugin directory to the plugin path in slicer.util.loadUI
Path that contains the plugin mud be added to the env. variable QT_PLUGIN_PATH. Dependencies of the plugin must also be added to PATH, LD_LIBRARY_PATH or DYLD_LIBRARY_PATH depending on the plaform. This last point is most likely already taking care of.
Would you recommend to add a [QtPluginPaths] section to an extensions AdditionalLauncherSettings.ini, or adding it to an existing entry ([Paths], [LibraryPaths]) and loading those to the QT_PLUGIN_PATH env var?
This means that a env. variable QT_PLUGIN_PATH will be set before starting Slicer. Each one of these paths a subdirectory named designer. The same thing should be done in AdditionalLauncherSettings.ini.
Then the launcher will take of creating a unified environment before starting the application.