1. We like to specify a limit because that establishes a testing criterion. You can be sure that we actually create tables with 2048 columns and attempt to create tables that exceed the limit as part of our regular testing.
2. The current limit is primarily dictated by limitations on the size of table headers in our file system. Each column requires a row descriptor, which occupies some space in the table header. Index descriptors, partitioning descriptors, and compressed values lists also consume space in the table header. The current (as of TD 12.0) maximum size of the table header is 128KB.