Even in std430 layout, 'vec3’s use the base alignment of 'vec4’s. So each array element is 4 values.
Also, the term “VBO” (to the degree that you should use that term) only applies to a buffer object that is bound to GL_ARRAY_BUFFER. Buffers can be bound to many targets, but they’re all still just buffer objects, no matter how you use them.
It should be noted that the vec3 alignment thing was something specifically put into the API. Probably for a good reason. Which means you probably shouldn’t bypass it like this unless you have a good reason to do so. The compiler could easily turn your memory usage into 3 separate memory access operations, rather than a single one in the case of a vec3 (even padded to a vec4).
So this could be more of a memory/performance tradeoff.