FreePOPs was not born from scratch. A similar project (only in the main usage situation) is LiberoPOPs.
The ancestor of FreePOPs is completely written in C for some uninteresting reasons. LiberoPOPs supports ``plugins'' but in a more static and complex way. The POP3 server frontend could be attached to a backend written in C, this means you have to recompile and restart LiberoPOPs each time to change a line in a plugin. Another interesting point is that LiberoPOPs was created from scratch in a really short time (you have to be Italian and use a @libero.it mail address to understand why), this means it was born with a lot of bugs and FIX-ME in the code.
The LiberoPOPs project had a quick success, because everybody needed it, and this means we had a lot of users. In the opensource (and also Linux) philosophy you have to release frequently and this was exactly what we did: we used to release every two days. We were working not with Unix users, nor hackers, but mostly with Win32 users. Suddenly we realized that they were lazy/bored of updating the software every 2 days. The ugly Win-world has taught them that software auto-updates, auto-install and even auto-codes probably.
We tried to solve this pulling out of the C engine most of the change-prone code, but this was really hard since C is not thought to do this. After LiberoPOPs had stabilized we started to think how to solve this.
A scripting/interpreted embedded language seemed to me a nice choice and after a long search on the net and on the newsgroup of my university I found LUA.. This is not the place for telling the world how good this small language is and I won't talk more about it here. Integrating the LUA interpreter in LiberoPOPs was not so hard and FreePOPs is the result. Now it is really easier to write/test a plugin and (even if it is not implemented yet) an auto-update facility is really easy to code since there is no need to recompile the C core in most cases.