I see, thanks for the info.
Actually, the reason I used separate VBO's in the first place was to minimize cache misses when iterating over the data. For example when generating normals, which is something I do quite a lot on dynamic geometry, I iterate over all of the vertex coordinates first, calculate the new normals, and then overwrite the old values. Tasks like this are more complicated on one interleaved buffer, and (I think) more efficient when the buffers are stored separately. There's always the possibility to store the data in different buffers in the engine, and then send them to the driver as one interleaved buffer but that's making things more complicated than needed in my opinion.
Another problem arises with the texture coordinates. I need to support both 2D and 3D textures, and a variable number of texture coordinates per mesh. I couldn't think of an elegant way to put everything in one class managing a single buffer.
So, the classes I have now are:
IndexBuffer, self explanatory I think
VertexBuffer, contains one kind of data (coordinates, normals, colors, texture1D, texture2D or texture3D)
GeometricData, contains one IndexBuffer and one or more VertexBuffers. (must have coordinates, may have normals and colors, and has an array with VertexBuffer pointers for the texture coordinates of which any may be null)
This is quite easy to manage, and makes it easy to share data between instances of the same model in the scene. For example, the texture coordinates of a model may be the same for every instance of the model, but the vertex coordinates not if it is dynamic geometry. This structure makes it easy to share the texture coordinates, but have a different VertexBuffer instances for the vertex coordinates.
Anyway, thanks for your answer. It appears performance is the only thing that matters here, and the multiple buffer approach is very fast. A scene with +- 500K triangles (quite a lot of shared buffers however), four dynamic lights working on every mesh and no texturing is rendered at over 1200 frames per second.
screenie