You can easily make kamailio the registrar and handle presence but you can just as easily move only presence to kamailio. regardless of that, what i meant by using ESL was:
subscribe to channel events (i use CHANNEL_CALLSTATE), use the `Channel-Presence-Data` event header (and some other useful ones) to "track" calls/channels 
you can even filter events to you only get "user" related events
send updates to kamailio via xhttp or nsqd or amqp (kazoo module) based on the events from freeswitch. kamailio will update it's presence data, send out the NOTIFYs