'Vertex' painting is actually face-corner painting. So per-face colors are possible, can be picked up by an Attribute input node in shader-trees.
Here are 2 color-attribute layers on a cube, both registered as Face Corner > Color in its 'Data' tab > 'Color Attributes' panel.
pcol has been painted, per face. That's successfully interpreted by the shader:
col has been generated and captured, per face, in a GN tree:
The spreadsheet shows that face-corners have independent colors, per-face..
And yet this time, the colors are interpolated across vertices by the shader.
.. in the latest 3.2b, at posting time.
Have I just made a silly slip, or are we waiting for further development?