A pruning node will trim the number of transactions you need to store. In the most extreme cases, they can store just the UTXO set and the most recent couple blocks, but the degree of pruning is variable, and up to the node operator. Think of it like this:
Alice sends 5 BTC from address 1www to Bob, at address 1xxx.
Bob sends 2 BTC to Carl at address 1yyy, and 3 BTC to Dave at address 1zzz.
Carl sends his 2 BTC to Dave at address 1zzz.
A normal node would need to store all the intermediate data, that is, (Alice -> Bob), (Bob -> Carl), (Bob -> Dave), (Carl -> Dave).
A pruning node, however, only needs to store the final link in each step. If Alice has no more coins in her address, there is no need to keep it around, you can safely discard it. The pruning node would only contain the data for the UTXO set, in this case, the 5 coins that Dave has.
Pruning nodes can validate transactions, verify that the sender does in fact have coins to send, and relay them to the rest of the network. They can also be used by the owner to check their balance completely privately, no need to ask someone else who has a copy of the pruned chain.
This answer should be updated to reflect the behavior of current versions. AFAIK, new versions of Core can now serve the blocks they have in store. – Murch – 2017-03-11T11:14:12.047
1They always could relay new blocks - ever since the feature was introduced in 0.11. However, until BIP159 is implemented, they can't advertize the fact that they will do so. As a result, in practice it won't serve any light clients. – Pieter Wuille – 2017-11-19T21:46:16.223