Circle-circle collisions are easy to detect; just check if the distance between the centers of two circles is less than the sum of their radiuses. Actually, while not computationally optimal, you can do a regular bounding box hit test (Object1.hitTestObject(Object2)) between two arbitrary objects. If the bounding box hit test detects a collision, do a pixel hit test on the two objects to determine if they really collided.
(There are various ways to optimize the latter, like transforming the bounding boxes to different shapes, or spacing vertices along the edges of objects.)
Furthermore, classical momentum is probably a good enough starting point to model the consequences of collisions. For instance,
elastic collisions applied separately to the x and y components of velocity (for each object involved in the collision) looks pretty impressive.
Edit:
Drag is simple enough to implement for spheres moving through a fluid (such as air), too.
"Stephen Wolfram is the creator of Mathematica and is widely regarded as the most important innovator in scientific and technical computing today." - Stephen Wolfram