It's largely a backwards compatibility hack, but the concrete methods also have an optimised fast path that the generic methods lack.
So (for example), PyList_SetItem would now mean "this is *probably* a list, so check for that and use the fast path if the assumption is correct, otherwise fall back on PyObject_SetItem".
Currently, using the concrete API means your code potentially *breaks* if the assumption is incorrect.
Sounds like a good idea to me, and will fix a lot of cases of bad interaction between concrete types and related objects.