1. (More important) The reference manual should point out that {...} is
the best way, overall, to deal with variadic arguments, and select is
deprecated.
You ignore memory allocation. As I understand, select(i, ...) requires
constant amount of memory while "{...}" allocates table and consumes
memory proportional to length of "...".
For example in World of Warcraft lua API there are many sick functions
which returns dozens of results. Instead of single table with results.
Maybe just because it's faster in C and does not create table which will
occupy memory till next garbage collection.
Also if your addon needs just couple of these results you'd better to
use select(). Again, to avoid creating temporary table which will occupy
memory.
Since I was heavily involved in the WoW UI
community at the time this change was made, I can comment on
your observation
The shift from tables to varargs wasn't really about
the impact at time of creation, but instead was about avoiding the
buildup of garbage since GC passes could happen at inopportune
moments resulting in a poor player experience. Since the WoW UI is
an environment that is essentially running dozens (hundreds for
some extreme cases) of independent small applications including
some which were from Blizzard and needed to be protected from the
others, the normal "single application" approaches to avoiding GC
(Shared result tables, work table re-use) didn't really apply.