You can put anything in a texture these days; they're just generic pod arrays now and you can do pretty much whatever you want with them; they definitely aren't always images that get stretched over explicit meshes! In my game, for example, I have one texture which contains the xyz positions and rgb colors of lights. And another which contains connectivity data for a road network. Neither one is an image that gets displayed or stretched over things, but they're used as data within various shaders.
The most "pure" way to do a "no mesh" render would probably be to use geometry shaders to emit your geometric primitives. (You do need to give it at least one "starting" primitive to make the draw call, but you're free to entirely ignore that primitive). It'd be trivial to embed some mesh data into a "texture", for example, just by reading vertex xyz positions into the rgb channels of a 1D texture that's `number_of_triangles*3` elements wide, and your geometry shader could walk along that texture and output those vertices and triangles and have them get rendered, without ever accessing a vertex buffer object.