Graphs are mathematical structures that model pairwise relations between objects. They are represented by vertices and edges where the edges may be directed or undirected. Whenever I am working on some research problem using graphs, my friends who are unfamiliar with graph theory question why I am thinking about graphs and not writing programs. Although I try my best to give an easily understandable reason, OxDE has explained it really well:
The short answer is that graphs can be used to reason symbolically about any kind of pairwise relationship between any kind of entity, and that we like to think about pairwise relationships because unary relationships aren’t powerful enough and k-way relationships for k>2 add extra complication without adding any real power.
We have graphs representing people and social networks connecting them (online friendships, sexual contacts, parenthood, coauthorship, etc). We have graphs representing subroutines in a computer program and caller-callee relations between them. We have graphs representing web pages and html links between them. We have graphs representing proteins in your body and the chemical interactions they participate in. Etc etc.
OxDE also gives a nice explanation of why abstracting problems is useful in mathematics and computer science:
Graphs are powerful because the same kinds of problems and algorithms turn out to be important in many of these different applications. So by taking away the application-specific features of all of those different problems and turning them into something as abstract as a graph, we only have to solve these problems once instead of repeatedly solving the same problems in different disguises.