There are only a few things you can edit on server if you don't want to touch a core (core is a file that is generated by compiling the sources).
The biggest section that serverside allows you is writing a quests. Those can be used for handling the dungeons or stores or just some kind of story line.
Next thing you can do on server is just about localization and some configuration of how is server working (based on your experience this is not related to you yet).
With editing source you can edit literally anything you want. Behaviour of spells, way of how you increase your skills, stacking behaviour, polymorph options and may other things. In a nutshell you, you can fix security issues, increase performance and create system you are not able to create without them (obviously lol).
Because M2 server is clever in that way it checks what is client doing, there are required changes in client sources too. But! Some changes could be done by editing only one of them. For example you don't need to edit server source if you want to add your custom effect for a weapon or you don't need to edit client source if you want to increase maximal level.
Last thing are packages. Here are stored data like 3D models, 2D graphics, sounds, icons, skyboxes, etc. Although there is coded our own "API" which provides Python to communicate with client binary that is written in C++ (mainly). Any UI you see in in packages too, look into UIScript.
Please consider I'm not calling myself as a developer so there could be some mistakes. We have more experienced guys here who could describe it more clearly.
Look, this could help you at the begining: