By using PWM on the inputs to the H-bridge, usually generated directly by the driving micro-controller - good reason for using a 16F876/7 as it has two hardware PWM channels.
The relay cannot be used to control the speed just because it switches not fast enough?
how if, the motor is drive too fast, i want to slow it down, by using a 555, the output of the 555 is connected to the Vcc of the H-bridge. Can this work?
Yes, but NOT fed from a 555, you would need a high power transistor or FET to drive Vcc - and it's then fairly pointless using so many relays, a single DPDT one would do.