Let's clarify your statement "If your list go beyond 2000 records, it will only return the first 2000 records":
1) This is only true if you are pulling all rows from a list that exceeds the power apps imposed limit 500 to 2000 items.
2) If you filter the list using delegable functions, then all of the rows in the list will be searched and only first 2000 (500 to 2000) matches will be returned.
My apps filter lists with 100,000 + items and the results are always under the imposed limit. To achieve this, you have to plan your filtering.
The delegation error is appearing in the original post because Count() is not delegable. Filter into a collection, then account the rows in the collection. Or use the With example below. Note, the with() will alway hide the delegation warning so you may not be aware it's happening.
ClearCollect(col, Filter(Switch(varRegion, "Region1", List1, "Region2", List2, "Region3", List3, "Region4", List4), field1 = var1 && field2 = var2).ID);
Set(nRows, Countrows(col));