I would consider require for a (very) basic plugin system. If you need anything more than that, I recommend Module::Pluggable and instantiating each plugin as separate object.
For plugin configuration, I haven't seen any good mechanism. I would look at how Dist::Zilla handles it but any plugin mechanism will either have static configuration and a ->visit method that either cancels all following plugins or modifies the visited object or will need some real programming anyway, and when you need real programming, doing it in Perl instead of a configuration file is advisable.