Firstly, no, you can't add texts to a vertex array; they can't even be batched. However, if you have multiple texts that don't change - or at least don't change often - then you can pre-render them to a render texture and just draw that (one draw call).
Secondly, if you're creating your button with a vertex array, its outline can also be added to that vertex array; you just have to do it manually. It's probably best to use separate triangles (although you can currently still use quads too) so look for the Triangles primitive type.
Lastly, you can use different
parts of a texture for each triangle so you can "batch-up" those textures onto one image (AKA texture sheet or sprite sheet etc.). The restriction for vertex arrays is that it must be a single sf::Texture, which is a single image, but it doesn't restrict how large those images are or which part to use per triangle.
Note, however, that there is a maximum size for an sf::Texture that is a restriction of the hardware. You can query this at runtime:
sf::Texture::getMaximumSize()Although it's not actually clear in that documentation, the "size" represents both the width and the height of the texture, not the actual size in pixels (the number of pixels in the texture).