I've been developing an idea I plan to use in my current game project. At least I hope to do so.
I would like to enable a game state output to a file, sort of like saving, which can then be accessed by a separate program. That program could then return a file which would be read with the game. In this way you would enable modders to have 100% freedom to design the AI mod of their dreams, probably a compiled program in C++ or some other language. Since they are trading file outputs the actual nature of the program probably doesn't matter as far as languages are concerned. The modder made AI could do all sorts of stuff like have its own files and data just like the built in AI of a game does since its its own totally separate program. Well there may need to be a way to spawn multiple instances of the AI module so that they can all run simultaneously and speed up the end turn wait. My CPU has 8 logical cores so it could use 1 for each instance of the AI.
Well, even just using all 4 cores would be helpful. Otherwise as long as your program could produce proper output you would have total freedom in the AI. Obviously for real time and multiplayer games this could be an issue, especially some kind of cheat in multiplayer, though I'm not sure it would be super easy to send a bogus output to get some benefit.
Also each individual AI could allow for scripting if so desired since it can do anything it wants, so you wouldn't be preventing non programmers from helping.