I don't quite buy it. If a library gets a update that is not backward-compatible, it does not matter whether you previously called that function as a callback or as direct invocation: your code may break one way or the other.
Any update is going to be backwards incompatible to some extent, even a change to the version number can cause and has caused breakage in software that has buggy version checks. Because of that, taking backwards compatibility as an absolute is not useful, and instead we generally limit it to where the old version was being used correctly in supported ways. Whether calling a function with more arguments than it is specified to take is supported will depend on who is maintaining that function, but unless documented I would assume it isn't.
That much is obvious. The blog post has an example of something that appears to be non-breaking (at least it would be in many other languages), but actually does break things. Both the library creator and user messed up in the example given, but if you're not intimately familiar with the language, both mistakes seem reasonable.
Yes, but here the argument is to not blindly apply just any function to a map since the signatures won't necessarily match. It's harder to spot the errors and is just technically wrong, even if it does work in that particular situation.