I don't know which method has better performance but if you just want to communicate with Live to build a new interface, I see some advantages of Python over Max4Live:
1. Users do not need a licence for Max4Live.
2. Once the Python script is configured as a control surface it works for all projects and there's no need to load a Max4Live patch every time.
One thing I don't really feel comfortable though, is how the callbacks are implemented, but that's a problem of Live itself I guess. For example, I'd like to see a global callback for clips like 'clipChanged(int track, int scene, int property)' instead of needing to add a callback for each property on each clip which forces the need to rescan all clips and add/remove new callbacks to newly added/removed clips each time a track/scene is added/deleted...
but it all depends the time you have to code that and the time you want to use it.
I mean, if you'd need a supported interface immediatly, you wouldn't be here to talk about python and just use m4L.
So I guess you have time. So I agree 100% with you: you have to code your own things