There are two meanings of the word "server." One is "a box of hardware running some service on a network." The other is "a game process that is a central spoke in a wheel of connected players."
When it comes to "services on a network," here are at least three kinds of "servers":
- The actual game server -- player clients connect to this, and use the server to exchange state about the game, and perhaps to apply rules to reduce cheating. May also deal with chat, especially within game sessions.
- The "player progress" kind of server. This stores high scores, player progression, unlockables, friend lists, microtransaction results, and so forth. May also deal with chat, especially for non-game-session things (guilds, groups, friends, etc.)
- The "matchmaking" kind of server. This keeps track of what players are looking for games, and what games are available or, perhaps, arranges for games to become available to match what players are looking for. This lets players find active game instances across the internet.
The latter two of these are very hard to run as P2P services, because the whole point is that they are shared and central. Yes, you can store unlocks on local disk, and you can use matchmaking on the local LAN, or have players type in IP addresses like it's 1995, if you don't want to run a central server.
For the "game process that is a central spoke," it is usually easier to structure a networked game in that way, because it allows you to make clear determinations about things like "who first picked up the health pack" or "who died before shooting the other person" or such. However, that process doesn't have to be hosted by you, or a machine you control. Someone running your game, can have that game run in "server" mode, and have other players connect to that. This is sometimes also know as "hosting" mode for the game client. Many popular games use client based hosting for game instances, but use central servers for player progression and matchmaking.
A true "P2P" system doesn't use a player-hosted server, even, but instead just sends the actions of player X to other players in the same game instance, and each other player in the instance send their state back to you. This situation may work OK on a local LAN, where you can use broadcast packets to find other players. It will, however, have real problems with any kind of tie breaking -- who reached the goal line first, and so forth? For some games, that may be good enough. If you want to play these games over the Internet, yet still have them be P2P, you'll have to have some kind of interface where players can punch in the IP address / port of some existing player, and then bootstrap connectivity to the other players through this initial connection. NAT punch-through and full connectivity in such a system is a major pain in the butt, and often needs special configuration of firewalls and routers. I don't recommend it for internet play.