There are a bunch of awkward limitations, tho:
The order of records associated with a name is undefined, so if you spread your data across multiple records, you need to add ordering metadata.
The total size of the records must be less than 64 KiB - they have to fit within a DNS message, which has a limited size.
You can put all your 64K ish data into one TXT record, but it has to be split into strings of up to 255 bytes.
You can invent your own record type to contain raw binary data without the sequence-of-strings requirement.
You can use multiple names (eg, numbers) to get past the size limit and to be explicit about the correct order.
I think that a lot of offensive tools to tunnel IP over DNS actually overcame these limitations in real time, at the expensive of throughput [1]. It obviously does require agreeing on some sort of protocol on both sides though.