I did a demo here of upto 100,000 animated sprites that can run in a flash enabled browser providing you have a machine decent enough to handle it.
The source can be seen here:
It uses indirect addressing in the shader to batch as many draws into one draw call as possible.
The technique means you don't have to modify vertex buffers every frame, but rather offset everything with shader constants.
You can do it the other way too, by just modifying vertex buffers on the cpu and re-uploading them and it will enable you to batch much greater numbers together than the method I used but each has it pros and cons.
On many devices I have found the approach I used to perform better anyway, and it also scales better with more complex meshes, as you have less data to update on the CPU every frame (same for 4 verts as for 40 or even 400). But you are limited by how many vertex constants you can upload.