[1]: https://www.postgresql.org/docs/current/storage-toast.html
That said, there has been some progress in the general direction of allowing this: supporting new storage implementations, e.g. zheap (https://wiki.postgresql.org/wiki/Zheap). But it's a large effort. Consider it has to implement new crash recovery, for starters.
[0] https://www.postgresql.org/docs/current/storage-toast.html
But you'd better be sure that its storage guarantees match what Postgres needs, else you'll risk database corruption.
The problem with heap and compression is that it mixes a lot of different data (i.e. data from different columns), which is not great for compression ratio. To address that, it's necessary to use some variant of a columnar format, and allowing such stuff is one of the goals of the table AM API, zedstore AM etc.