If the users are not doing stuff that requires session management, you can cache a lot. I have seen a portal type of solution handling 300 concurrent users while the server was using 0.2 CPUs in total.
The more you have actual logics, elements that can not be shared between users and user sessions, the less you can cache and the more you need real hardware. Sometimes this is even hard to estimate. I was in a project where we built an intranet solution for 15 000 daily users. By mistake we noticed that the servers that were built can handle 100 000 daily users...