From what I've learned Surface is a place (or kind of cointainer with two axises) where you position your Sprites which can be group with SpriteGroup.
surface = pygame.display.set_mode((800, 600))
Sprite has it's coordinates relatively to the Surface it is drawn on.
So basically you want to group all the sprites by specific objects you show on the screen, for example ActionGroup, MinimapGroup, PaperdollGroup etc.
In the end of each tick you have to choose which UI objects (mean groups) you want to draw on current Surface.
ActionGroup.add(backgroud_sprite)
ActionGroup.add(move_icon_sprite)
ActionGroup.update()
ActionGroup.draw(surface)
A Surface class has some methods to work with overlapping, pixel masks, transparations and other stuff, so it's more "how to draw" than "what to draw".
The question for me is should I use several Surfaces or I can do most things with just one?