This looks like a relatively niche feature, remarkably as you need to make it even more complex by defining what you mean by "first 200 elements". Is this the first 200 tuples, each with unrestricted size (no good if your input Sets have very skewed sizes)? Or maybe the opposite (i.e. "column-first" for two Sets), ok that you can get by changing the order of the Sets. But maybe you want the first 200 elements, no matter how many tuples. Or, somebody else may want a limit determined by diagonal scanning: the smallest top-left-cornered square (, cube...) that will contain at least 200 elements; this has the advantage of sampling the same number of elements of all input Sets (but may return less than the desired limit for skewed inputs). You could also make diagonal scanning with proportionally-identical limits for each Set, which enforces identical sampling of each Set and avoids problems with skewed inputs.
Or you can easily emulate all these scenarios by passing subsets of the inputs, like this:
int limit = 200;
double fraction = (double)limit / (list1.size() + list2.size() + list3.size());
Lists.cartesianProduct(ImmutableList.of(
list1.subList(0, max(list1.size(), (int) ceil(fraction * list1.size())),
list2.subList(0, max(list2.size(), (int) ceil(fraction * list2.size())),
list3.subList(0, max(list3.size(), (int) ceil(fraction * list3.size())));
This code implements the fanciest, proportional diagonal sampling; other scenarios will be simpler. Notice you need Lists for this due to the sublist operations, lists are really more adequate for code that needs to slice and dice data (wouldn't be hard to take a random sample of each 'dimension', etc.). If your input data is already in ImmutableSets, the ImmutableList.copyOf() operation will be O(1).