That's right, kinematics do not collide with each other, so "basically the only way for an object to move would be for me to move it directly with SetLinearVelocity()"

It sounds like you will need to program in a bit more customization somewhere for what you are trying to do. One possibility is for each dynamic body to have a kinematic body 'shadowing' its movements, and set the collision filter of the kinematic fixture so that it collides with the other dynamic bodies. iirc I tried this and posted an example to the forum here, perhaps you could try to find that. I think it worked ok for simple cases.