The hint about loose coupling is good, you want to be able to evolve your app without breaking the plugins/macros.
Decide who is in control. Does the plugin run in the background or may only provide functions the app calls.
make sure you can limit the runtime of the execution of plugins, in case you want to ensure that plugins can't hang/crash your app.
Also think about security, depending on the use case it might become an entry point for malware.