This has prompted me to consider including a sf::Sprite as a member of the Ball class.
Good idea. You should prefer aggregation over inheritance wherever possible, because it is a weaker coupling and thus provides more flexibility.
This works fine, but leads to some verbose syntax such as
Ball.GetSprite().GetSubrect().x;
to simply access the width of the ball.
Yes, but that is a problem of bad encapsulation. If the sprite is always accessed directly via member function (maybe even through a non-const reference), you could also make the sprite public. Instead, you could adapt the Ball's interface to provide only the necessary functions, for example GetSize().
Or you could even go one step further and not let the ball depend on SFML graphics classes. Instead, you can directly store the size and some other attributes, and construct the sprite just before the rendering (or store it somewhere else). But those are only some spontaneous thoughts
The other problem is, if you wanted to extend the sf::Sprite class to, say, an AnimatedSprite class, it would only make sense to inherit from sf::Sprite
No, it would not. The Liskov Substitution Principle wouldn't be satisfied. For example, what should GetSubRect() return for an AnimatedSprite if there are multiple subrects (one per animation step)?
And as a general note, the rendering API in SFML 2 is currently changing, so it might be worthwhile to wait some time before making a lot of code dependent on sf::Sprite.