I will try not to write my typical book on this topic :-) Most of the problems with kitchens lie with limitations on containers.
If you are trying to make a luxurious meal (4 ingredients), the first thing to realise is that the dwarf making the dish will, for the first item, pick the food that is closest to them when they get the job. That means that if they are 150 z levels below the kitchen when they get the job, who know what they are going to pick. After that, the pick the first ingredient that is closest to them from the kitchen -- with one important exception. If the previous ingredient came from a container, they will continue to take things from that container until it is empty.
This means that if you have a container full of several stacks of fat, and that's the closest food when the dwarf first gets the job, then you will make a roast consisting of fat, fat, fat, fat.
The easiest way to ensure that the meals are varied is to ensure that none of the ingredients are in containers. There are many problems with this strategy. The first is that dwarfs will never move an item from a stock pile that allows containers to a stockpile that doesn't allow containers. This means that if you have a stockpile for food that allows containers, even if you give to a stockpile that doesn't allow containers, food will never move across until all the containers are full. So that's pretty much a no go.
This means that if you don't want to have food in containers, then you can *never* put the food in containers.
This isn't as bad as it sounds. There is too much food in DF. You don't need thousands of prepared meals. You can pretty happily live with no more than a 10x10 stockpile of single stack ingredients. As your farmers get more proficient, that's going to be 500 food, which is *plenty* until the next harvest. If you add stacks of meat, quarry bush leaves, etc, you can get up into the thousands of food in that smallish area.
One problem with that is that you are still going to be suffering from the dwarf going to essentially the same place each time to get ingredients -- because 3 of the 4 ingredients are chosen as the ones closest to the kitchen.
You can make several kitchens and surround them with ingredients. Imagine a 5x5 room with a 3x3 kitchen in the center. Then you can make a stockpile that surrounds it which is 15 tiles. That stockpile can be linked to your main 10x10 stockpile. This will give you pretty good random selection. Especially if you have 3-4 different kitchens, they should have pretty different foods.
You can take this a step further and link your new feeder stockpiles the the kitchens. This forces the dwarf to take ingredients from that stockpile and means that they *have* to take the first food from around that kitchen. You can go extreme and make each tile around the kitchen a different stockpile that holds only certain ingredients. This will allow you a bit of control over what you cook, though it can make setting up automated work orders a bit tricky since the conditions for starting can be complicated.
You can go even more crazy and have exactly 4 single tile stockpiles linked to a kitchen, each for a specific single ingredient and taking form the main stockpile. Then the work order condition is quite easy: have greater than 1 A, greater than 1 B, etc. This gives you ultimate control over what you are making. This is great if you have ingredients that you dwarfs prefer and you want to make meals out of them (essentially multiplying the amount of food they will prefer).
There are problems here as well. Some ingredients (like drinks, seeds, milk, etc) *must* have containers. Seeds are really problematic because they can have multiple stacks of seeds in the same bag. This leaves you with a seed, seed, seed, seed roast. One solution is to forbid seed cooking in the kitchen settings. If you have a dwarf that prefers seeds, my approach is to set up a dedicated kitchen for making those seed cakes. I kind of think that it's pretty realistic that there is a special kitchen for making special foods.
Another problem is that when you have a stockpile that accepts barrels, the dwarfs will reserve one tile for an empty barrel. This is a stupid anti-feature that I wish they would take out of the game. In older versions you could set the number of reserve barrels to 0, but in 0.50 that ability is gone. This means that if you want drinks in you meals, you need to have a 2 tile stockpile for them.
Drinks are nice because almost all dwarfs have a drink preference. Drinks are much, much easier to satisfy than food preferences. Drinks cooked into meals count as a preferred food in meals for happy thoughts. So they are very desirable to have in a meal. However, keep in mind that you mind end up putting 2 barrels of drinks into a single meal. Not really that bad, but it's annoying. And *sometimes* they will put 2 empty barrels in your stockpile. If you have linked stockpiles and special work orders, you are then going to get a lot of cancellation spam because you *have* the drinks, but the dwarfs can't put them in your stockpile.
There are a couple of other gotchas, but these are the "basics" :-). Really, just having feeder stockpiles around several kitchens that draw from a main stockpile is enough to improve variation a *lot* and I recommend starting there.