Yes, there are such languages. Many of them.
In fact, this feature is pretty much the definition of an array language or vector language. Examples of array and vector languages include, but are not limited to, the APL family of languages with its successors, derivatives and cousins (E.g. APL, J, K) and pretty much all mathematical and statistical languages such as Mathematica, MATLAB, Octave, R, and S.
Fortran 90 and Ada also have this feature, as does Fortress.
Interestingly, many modern CPUs also support vector programming, e.g. the x86 architecture with the MMX, SSE, SSE2, SSE3 (Intel) and 3DNow! (AMD) instruction sets, the POWER and PowerPC architectures with the VMX and AltiVec instruction sets, Sparc, MIPS, even ARM.
The Cω language by Microsoft Research has the concept of streams (roughly similar to
IEnumerable). Streams pretty much work exactly as you describe. Here's an example from the Cω documentation (emphasis mine):
A key programming feature of Cω is generalized member access: the familiar 'dot' operator is now much more powerful. Thus if the receiver is a stream, then the member access is mapped over the elements, e.g.
zones.ToString() implicitly maps the method call over the elements of the stream
zones and returns a value of type
string*. This feature significantly reduces the burden on the programmer.
A very interesting property of this kind of programming is that it not only allows you to semantically think of "applying an operation to all elements at once", it also allows the language implementor to implement it by literally applying an operation to all elements at once, IOW in parallel.