The only way I figured it out was to read SFML's shapes' source. Update()'s documentation says that you must call it when the geometry changes, and it's not obvious that this includes when you haven't set the geometry yet.
I think it should be in the introduction as well, currently it's easy to believe that you only need to override the two methods.
In my Python binding, RenderTarget.draw() takes a list instead of a Vertex* a vertex count, so I'm considering removing VertexArray. But I'm wondering, why not use let the user pass a vector<Vertex> in C++ then?