Let me try to clarify your confusion, I can understand it 😉 However, take care that there are multiple tools/projects called serverless-express or similar and they have different meanings (see the end of my answer). I'm assuming below that you want to use Express within a Lambda function.
Explaining the different terms/tools
Serverless is a tool/framework to ease the infrastructure deployment process for services like AWS Lambda (but there are other Function-as-a-Service providers or tools supported). This means the Serverless framework can help you writing functions as Infrastructure as Code and hence, you can easily connect Lambda functions with other services like API Gateway, SQS, SNS, and more.
API Gateway is a service to define endpoints or routes and forward an HTTP request to another destination. This can be a Lambda function but also a completely different HTTP endpoint.
The main purpose of Express is to manage routes and some middlewares, so you can implement your business logic for specific endpoints. Express starts an HTTP server and then forwards the requests to your business logic.
Understanding the differences
You could say to some extent that in general an Express app is like a combination of API Gateway and AWS Lambda because it knows how to route requests (= what API Gateway is doing) to your business logic (= what AWS Lambda functions are doing). The only difference is that a typical Express app runs on its own server whereas API Gateway and AWS Lambda are separated services that need to be connected together. This is what you can do with Infrastructure as Code. (You can also do it manually but it's not recommended for larger projects) Then, you "only" need to implement your business logic inside your Lambda functions.
How Express apps run on AWS Lambda
However, it's possible to run an Express app on AWS Lambda since you can run almost any kind of Node.js program on AWS Lambda. In such a case you still need to combine API Gateway and AWS Lambda in order to receive HTTP events in your Lambda function. This is necessary because AWS Lambda alone can not receive any HTTP request, it can just receive 'events' of any structure. Instead of directly receiving HTTP requests in Lambda, the API Gateway is forwarding all HTTP requests to your Lambda function (= you can configure to forward all requests, independent of the url path or HTTP method) and converts them to an HTTP event that can be handled by your Lambda function. Then, the Express app in your Lambda function uses this HTTP event so it knows where to route the request/event within your code. In the end it means you just use AWS Lambda as a way to run your Express app, instead of using a separate server.
Tools to achieve it
As mentioned in the beginning, there are several projects or tools that call themselves serverless-express or similar. For example, there is https://github.com/vendia/serverless-express which contains some glue code to connect an HTTP event in your Lambda function with the Express app code. But this project is not using the Serverless framework. Instead, it's using the Serverless Application Model (SAM) which is a CLI tool by AWS directly. However, there's also Serverless Express that tries to achieve the same thing but in a slightly different way using the Serverless framework.
Reasons why you should reconsider your approach running Express on AWS Lambda
Although it might sound like a nice idea to run Express apps on AWS Lambda, I can definitely not recommend it. You duplicate most of the routing stuff as you might have recognized by my explanations above. If you want to know more reasons why you shouldn't do it, I can recommend reading this blog post which goes into more details.