For the purposes of your question, I will subdivide rocket engine designs into two categories, and some sub-categories
- Designs using hypergolic propellants
- Designs using non-hypergolic propellants
- Designs using a torch igniter or something similar
- Designs using non-reusable ignition mechanisms (e.g. hypergolic slugs, solid fuel igniters, probably others I haven't thought of)
Designs of type 1 can be restarted any number of times. Hypergolic propellants ignite on contact with each other, meaning no separate ignition mechanism is necessary. For this reason you see them used in Reaction Control Systems (RCS) on the space shuttle, SpaceX's Dragon, and other vehicles
Designs of type 2.1 can also be restarted any number of times, theoretically, but they rely on an ignition mechanism that has moving parts (i.e. valves) that can fail, so the upper limit on the number of times it can restart would depend on the reliability of the mechanical components.
Designs of type 2.2 can only be restarted a fixed number of times, in some cases they can't be restarted at all. Designs using hypergolic 'slugs' place a 'slug' of hypergolic propellant in front of the 'normal' propellant, so that the slugs ignite and provide the heat to ignite the rest of the propellant. Here, you're limited to the number of slugs you take with you. This will typically be a single-digit number. I believe this is the method SpaceX uses for their upper stage engines when they need to deliver satellites to higher orbits. And as Rikki-Tikki-Tavi pointed out, other engines use solid fuel mechanisms to ignite their fuel, and in that case you're limited to the number of solid fuel igniters you bring with you.