OP_RETURN does exactly this, intentionally. Current methods are just cheaper in terms of fees.
Discussion
OP_RETURN has a limit of 80 bytes; this avoids the possibility of spamming the timechain with monkeys.
Storing huge data in a OP_IF block is not intentional at all, it is cheaper because it is effectively an exploit.
OP_RETURNs of arbitary size are consensus valid, simply nonstandard (won't get relayed by normal nodes). You could also easily design a scheme where a monkey jpeg is split across multiple transactions, too, and it would be valid AND standard, but again it would be pretty inefficient.