The explanations I've heard of "design" and "contrasts" make them sound like "overlapping"/non-independent concepts. I.e. it would be possible to give values to these two parameters that are inconsistent with each other.
Is that the case? Or can the two parameters be specified completely independently from each other?
Yes, and to follow up on Ryan, in terms of code, DESeq2 will make sure that, if you specify a contrast, those refer to specific coefficients that were fit based on the design formula. E.g. if you don't include a variable in the design, those coefficient won't be present to use with either 'name' or 'contrast' argument of results(). results() performs a lot of checks to make sure that when you specify a contrast, it corresponds to a reasonable linear combination of coefficients, and if it doesn't, results() tries to tell you what was wrong.