(Something I missed, which is important but I don't think changes the basic point: the semantics would I think need to be defined in terms of operations on sets of tuple streams, rather than just tuple streams, to account for the way mappers and reducers operate in parallel on streamed data from partitions of the overall data)
CoGroup with a BufferJoin is probably the most glaring example -- the BufferJoin only serves as marker that an Every with Buffer is going to follow, and it outputs Fields.NONE "as a hint to the planner". (Incidentally this sometimes seems to screw up the planner's ability to infer the output fields of the following Every too, in 2.6 at least).
GroupBy and CoGroup in general, while they do sort of have a general tuple stream semantics as I understand it (at least when followed by an Each, the output is the input partitioned and sorted by the group fields then the sort fields within each group), the way it's explained makes it sound very dependent on the combination with what follows after it (an Each, and Every, ...), rather than describing it as an operation which has a clear interpretation in its own right.
The Every pipe that follows after a GroupBy/CoGroup requires special knowledge of what precedes it in order to know what the grouping field was, so it's not really a general tuple stream transformation in itself. It's not just that it can only follow after a CoGroup/GroupBy, it's that its behaviour depends on the internal parameters of the preceding GroupBy/CoGroup (the grouping fields), not just the fields and tuple stream that come out of the thing that precedes it. If an Every could work with any (grouped) stream of tuples provided you tell it how they are grouped, then it'd be a general tuple stream transformation, and that might actually be useful sometimes when doing map-side aggregations on pre-grouped data.
-Matt