This is one of those situations where choosing to use ES changes the landscape a bit. Personally I don't think ES can work very easily if at all unless you're applying some level of CQRS. Greg's EventStore actually does appear to give you the ability to use it as the only data store but that's a special case because it's been designed from the ground up to be a good ES storage system.
For me, I only store aggregates (i.e. my domain) in my event store. All those other things (e.g. names of countries) come from somewhere else. Perhaps from a sql database, or a bunch of text files, hard-coded, even.
However I'd suspect that more of the things you're talking about are actually domain objects anyway. Products almost certainly are, and also the "recipe" (which I'd call "Bill of Materials"?). Anything with rules around it that's a core concept in a domain that crops up regularly in talks with domain experts is *likely* to be an entity in the domain. So in summary - those things that really are simple things or lists of text, put them wherever you like. However you'll probably find there are more "real" entities than you thing, which you should model in your domain and persist in your event store as such.
The real question is - if you model something as an entity and your *commands* persist it in an event store, how do you *query* for them in different, useful ways? CQRS is the answer, and essentially you write projection code that takes events generated by your entities and uses them to build an additional Read Model that's whatever you need it to be. Maybe more than one... I personally am taking events emitted by my domain and sending them through a publisher. There are currently several subscribers to those messages:
- SQL read store updater.
- Neo4j graphdb read store updater (planned).
- Mobile device database updater.
- SignalR-based desktop client updater.
If my app needs to perform simple queries over things like Products (that are stored as event streams in a RavenDB database using my Regalo library and are therefore tricky to query easily) then I'll make sure to build a Products table in the SQL read store that's maintained by the projection app. In things like MVC controllers then I use the Simplest Thing That Could Possibly work - I open a SqlConnection and use Dapper to grab the data and hydrate some ViewModel objects that are rendered in Razor and sent to the browser.
That's quite a lot of typing. I hope I haven't missed the point of the question... :S Still, hope it's useful anyway.