The key is patience - you need at least 45 minutes to an hour of low heat, stirring often, to get that deep brown color; rushing it on high heat gives you soft onions, not caramelized ones. For richness without beef stock, use a mix of chicken stock and vegetable stock, then add a splash of red wine, a bay leaf, and some thyme while they simmer; the wine and herbs do a lot of heavy lifting. Some people also add a spoon of tomato paste or soy sauce near the end to deepen the umami without making it taste like beef. The long slow cook is really what separates good French onion from the flat stuff - don't skip it.