In theory I suppose they can exist - they would be GL 1.4 (or lower) implementations that support GL_ARB_shader_objects (or even GL_ARB_vertex_program and GL_ARB_fragment_program) but not GL_ARB_vertex_buffer_object. It would be very obscure, short-lived hardware, however.
Vertex buffer objects are core OpenGL in version 1.5 onwards, so every GL 1.5 or higher implementation supports VBOs - including your GL 2.x target.
Just to give some context here: people do on occasion use support for older hardware as a rationale for retaining downlevel codepaths, and it invariably turns out that they’re unaware that the downlevel codepaths are actually completely unnecessary, and that the older hardware they want to still support actually does support shaders, buffers, etc.
This is probably a messaging problem. Because core modern GL forces you to use buffer objects, the impression seems to be that buffer objects are a core modern GL feature, for example. The thing is, they’re actually not - they’re actually an old old old feature that even pre-dates shaders.