My understanding is that IOTA is mostly useful to communicate data rather than to store data, given that the network undergoes periodic transaction pruning (snapshots). Is this correct? If so, is there any way of actually storing data long-term in the network without relying on third-party storage nodes?
That is correct. Currently there is no official way to store data permanently in the tangle. However, the IF is working on so called "permanodes" which will store the transaction data infinetly. With the local snaphots coming soon, I presume it is up to the full node how long it will keep transaction data so probably it is possible for any full node to become a "permanodes". However, the details of this are currently unknown to me.
UPDATE: local snapshots are finally here since IRI version 1.6.0. Permanodes are still not specified, however it is possible to store as much data from the tangle as you like.