Well, I've been able to work around this issue for some time now, but I didn't want to post until being absolutely sure it works.
In fact, I'm still unsure if these 3 points I found out were always the issue, but it's all I've got until now. Meaning, approaching these 3 issues I've been able to keep using bonobo without further troubles:
1. git commit --ammend
I use this from time to time and I'm pretty sure, if you push a commit then ammend it and try to push it again, it will not be accepted. The only way I found around this issue is overwriting the push with the push --mirror
2. checkout older commits
If there's a branch both local and in the server but my local branch is somewhere in the history before the same branch in the server, the push will fail. This has a simple solution: checkout the newest or newer commits than what's been pushed.
As you said, merging. But not using separate branches (for whatever you meant there, I didn't really get it). If the same branch (usually the master) is in different places because one machine pushed it to the server without merging first, then the other machine has to pull, merge and then it will be able to push just fine. This is where I think it gets really weird... In a bare repository, from what I understand, merging shouldn't be needed because it would not keep a consistency track of branches or tags, it'd just register where they are.
So, that was the kind of thing I was hoping someone to tell me... Yet, I couldn't find this kind of info anywhere!
Thanks again for giving some thought on this, garfield!
And... I don't think it's lack of GitSharp support... Though I didn't know what that was until I googled it and read 1 line about it just now ("it is an implementation of Git for the Dot.Net Framework").