Box2D uses SI units because it has a lot of hard-coded assumptions about the sizes of objects in the simulation. Ex: if your Box2D objects arent ~1 meter in size, then there can be some fairly high performance penalties. The problem is that most people don't care about true realism in a game. Look for articles on Angry Birds physics for example, all of the values they come up with are nonsense because the game is basically a cartoon that just has to "feel right" not be right.
Chipmunk was designed to avoid ever needing hard-coded assumptions like that. You can simple use whatever units you want. If you are passing seconds to the functions that expect time (like cpSpaceStep()), then your unit of time is seconds. If you are passing pixels to functions that expect distances or positions, then your unit of distance is pixels. People tend to make up numbers for mass, but again it's all relative.
Derived units are just combinations of the above. Ex: pixels/second for velocity or mass*pixels/second^2 for impulses. If you know the conversion factors for the basic units, you can find a conversion factor for the derived units.
You might also want to consider using raycasts for bullets instead of rigid bodies. They have vastly better performance, and are usually simpler to deal with in terms of collision callback events.