Actually the shadow algorithm is more similar to
this. Basically, are generating a lightmap of sorts using additive blending. You use a radial gradient texture on a quad to simulate falloff, and mask out the shadows in the alpha or stencil buffer by drawing quads that extrude each segment you want to cast a shadow off in the direction away from the light.
Originally I figured it out after playing Gish. That game had similar shadows and they looked fantastic. My method was to use the stencil buffer and homogenous coordinates to project the shadows off to infinity. The article linked above (and Gish too actually) used a finite amount to extrude the shadows and made weird artifacts when a shadow casting entity was close to a light.
The iPhone doesn't really have that much CPU power though, so to run both the physics and the lighting, I had to figure out a way to make one of them faster. Having spent years working on Chipmunk, I figured it wasn't going to be that. Instead I found a nice way to avoid recomputing the shadow geometry every frame and it even worked out to be simpler code wise. Shadowing is very fillrate intensive, 2D or 3D and I had to make a handful of optimizations there as well (rendering a 128x128 FBO instead of per pixel, etc). We went from having 1 or 2 lights onscreen at ~40 fps to 5 or 6 at 50! I plan on detailing out how I did it someday, but for the moment I was hoping it to be a secret sauce that we can use on another game or two. The method I'm using isn't applicable to soft shadows either.