I am writing an application which should be able to run on Linux, Mac OS X, Windows and BSD (not necessarily as a single executable, so it doesn't have to be Java) and be extensible using simple plugins.
The way I want my plugins to be implemented is as a simple Python program which must implement a certain function and simply return a dictionary to the main program.
Plugin installation should just be a matter of copying the plugin script file into the ./plugins directory relative to the main executable.
The main program should be a stand-alone executable with shared code amongst all of the above platforms, but with platform specific front-ends (so the Linux and BSD versions would just be CLI tools, the Windows version have C++ and MFC front-end, and the Mac OS X version would have a Objecive-C and Cocoa front-end).
So I guess it's really two questions:

What's the simplest way to share common controller code between multiple front ends from:
a. Objective-C on a Mac?
b. C++ on Windows?
c. C/Python from Linux/BSD?
What's the simplest way to implement plugins from my common controller to execute custom plugins?
The simplest way to share the cross-platform Python component of your application would probably be to implement it as a command-line program, and then invoke it using the relevant system calls in each of the front-ends. It's not the most robust way, but it could be sufficient.
If you want plugins to just be a file containing Python code, I would recommend that they at least conform to a convention, e.g. by extending a class, and then have your code load them into the Python runtime using "import plugin_name". This would be better than having the plugins exist as separate programs because you would be able to access the output as Python types, rather than needing to parse text from standard input.
Simplest way to write cross-platform application with Python plugin extensibility?