create a procedural texture with some (non-overlapping pebbles)
make this texture create an alpha mask in addition (to mask out places without any pebbles)
use multiple instances of that texture and overlay them according to the alpha mask
Here is a (proof-of-principle) example, using a remapped voronoi texture to make the pebbles. It’s just hacked together hurriedly for you, so see it as a point to get started, not as the best one can do.
The voronoi texture probably is not optimal, as it creates a very large range of pebble sizes. There certainly is a better method. Using 2D voronoi should be better, but will only work with UV maps.
There are differently-colored rims around the pebbles visible. The reason for this is that the height maps of the pebble layers are alpha-masked before generated bump normals. The bump node (because of finite approximation of gradients) produces these artifacts then. It should be gone by using a bump node for each individial pebble layer and alpha-mask these.
As is, the texture lacks depth due to ignoring occlusion between pebble layers. Can’t come up with a fix currently. Maybe someone else has a suggestion.
An alternative would be a semi-procedural texture, overlaying copies of an image texture (or better multiple variations) like this with random positions and rotations.