There obviously are servers, "serverless" just implies you don't own them.
There's a few problems that using serverless solves:
1. It's great for low volume sites or services. You don't need to rent hardware that runs the whole month if you only get pinged a few times per day.
2. It reduces operational burden. A whole class of problem goes away - patching operating systems and application servers.
3. It provides an abstraction layer for processing events. Events could be HTTP requests to a site, data coming in from an IoT device, that a new file was uploaded to S3, etc.
Performance isn't that different from using EC2 (or the non-AWS equivalents), other than cold start times, and choice of language platform can help mitigate that.
In terms of complexity, for the project work I've done the complexity isn't different than running something in any other application server.
Cloud providers other than AWS have a serverless offering, and there are frameworks out there for abstracting the differences, so tooling support doesn't have to come with lock-in. In addition, a well-architected serverless application has a pretty small layer interfacing with the serverless framework, so the code lock in is negligible.