The constraint is not inherent to TSDB generally. Influxdb supports string values for example, as mentioned in the article. You also have log databases, like Loki, that are designed like a TSDB, except they only store strings.
My guess is that constraining to numbers greatly simplifies the implementation, especially so for the query language and aggregation functions.
There are some compression algos (e.g. gorilla) which do a good job at lossless compression. However the key is not to try to store arbitrary data types in the same table (don't use "OO" ideas here).
My guess is that constraining to numbers greatly simplifies the implementation, especially so for the query language and aggregation functions.