I'm creating my own graphics engine (for educational purposes), in which I'd like to render hundreds of texture quads in a 3D world. I'm new to OpenGL, but have followed multiple tutorials on the subject. I have a "decent" understanding of what I'm doing. However there is just one aspect I can't seem to grasp, correct use of VBOs.

These are the following ways I've thought of using them:

1. Each textured quad(game object's renderComp) has it's own VBO containing vertex data(vertices, texture coords, colors)
-Pros: Easy to implement, adding/removing objects to render would be as simple as creating/deleting VBOs
-Cons: The VBOs would be so small that it'd be a huge performance hit to Bind/Draw/Unbind every VBO each frame

2. Have one(potentially more if it fills up) VBO containing ALL the textured quads vertex data interleaved
-Pros: Only 1 Bind/Draw/Unbind call per frame, should provide much better performance
-Cons: I have no idea how to keep track of what vertex data belongs to which game object. I could ADD to the VBO, but have no idea how I would remove (no longer render) from the VBO. (Unless I delete, recreate the whole VBO each time I remove something).

3. Have a STATIC VBO for objects that won't be changed i.e. Map, and have an additional VBO for objects that will be created/deleted at runtime.
-Pros: Same as #1 with a slight performance boost (less GL calls)
-Cons: Still more calls than I would prefer

I feel like there is something I am missing here. Could someone fill me in?