I think the default has been made to 1000L to be consistent with readr from where the idea is from. I can't explain why this is this value but I think most of the time this is enough for the guessing mechanism.
Also, if you have an excel with lots of column, and you select by default every row, there is a chance you'll be limit in RAM to load the data. The default may be there to prevent issue and work in all case.
For other case, it is very easy to change the default and use a maximum number of line (with guess_max=Inf). You'll have a warning because there is a limit to .Machine$integer.max%/%100.
library(readxl)
datasets <- readxl_example("datasets.xlsx")
read_excel(datasets, guess_max = Inf)
#> Warning: `guess_max` is a very large value, setting to `21474836` to avoid
#> exhausting memory
#> readxl works best with a newer version of the tibble package.
#> # A tibble: 150 x 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5 3.4 1.5 0.2 setosa
#> 9 4.4 2.9 1.4 0.2 setosa
#> 10 4.9 3.1 1.5 0.1 setosa
#> # ... with 140 more rows
Created on 2018-12-28 by the reprex package (v0.2.1)
You can also easily provide the column type if you know them and bypass the guessing mechanism.
Hope it helps getting more context.
We'll see if someone from the tidyverse team has a better explanation about the limit of 1000. 