Hi there,
a quick update: Check out this GeoSchelling example with European NUTS regions :)

Pretty nice, huh?
Downside is that it is mostly a proof of concept. As my time resources will be limited in the next months I think GeoMesa will take some more time, but stay tuned. At least I want to use it productively in Autumn, so there should be some progress.
Upside is that I had to change surprisingly little from the Schelling example to get this to work, of course with the help of a new GeoSpace module, which does most of the work.
This is how it works at the moment:
GeoMesa introduces patches, which are like agents, but do not act on themselves, i.e. no decision-making. They merely represent the landscape in which agents act. GeoMesa also assumes that every agent and every patch has a shape attribute, which is a shapely.geometry object. In the simplest case this would be a point. The shape also contains the coordinates/pos of an agent.
Functionality is provided that takes a GeoJSON object (and therefore potentially any spatial vector data) and turns it into a patch or agent (the NUTS regions in the example above).
The GeoSpace module keeps a list of all patches and all agents on the "grid" and provides functions such as check for intersections between shapes, get all the neighboring shapes, etc.
For the Schelling example, a patch is created for every NUTS region. Then, for every patch an agent is created with probability "density", which can be majority or minority with probability "minority_pc", just like in the original example. The shape of the agent will be the same as the patch. For my simplified example I then just count the number of similar and different neighbors and move if there are more different neighbors.
Here is the gist of the example. The other modules are still too messy to put them online, sorry ;)
Now the two biggest issues so far are a 1) place to work on this and 2) the visualization.
1) is related to where to publish mesa extensions/kits. This is something the mesa core team has to decide. I don't think there will be too many files so I am not sure if a separate repository would be necessary. I could also imagine putting it into mesa.kits.GeoMesa and have its dependencies as optional dependencies, if that is possible? I know this issue has been raised, I just want to push a bit ;)
2) is possibly related to 1) and I have not looked into this yet. The above visualization was created with the python package folium which plots on a leaflet map. But this does not tie in with the way mesa works. But as every shape of GeoMesa can be represented as GeoJSON object, a vis module based on D3 or leaflet should be doable rather straight-forward. That is, if one is used to javascript, which I am not.
There will be also some more specific questions on how to do some things mesa-style, but I think I will leave it like this for now
Best
Corvin