What is the difference between exactness and optimality of an algorithm? I'm studying some papers related to graph partitioning (GP). It is well-known that the GP problem is NP-Complete. Based on my understanding, it means that there is no polynomial time solution to solve this problem, or there is no optimal solution for that. 
The following paper mentioned this fact in its introduction:
"An exact algorithm for graph partitioning" 

However, they provided an exact solution for GP using branch-and-bound algorithm. Isn't it a paradox?, I mean I assume that if a problem is NP-Complete, there is also no exact solution for that, right?
Every NP-complete problem can be solved in exponential time. Assuming that P differs from NP, it cannot be solved in polynomial time. It follows that the branch-and-bound algorithm probably doesn't run in polynomial time (in the worst case).

To give a concrete example, consider the problem of MAX-CLIQUE: given a graph, the task is to find a clique of maximum size. The decision version of this problem (given a graph and a number $k$, decide whether the maximum clique has size at least $k$) is NP-complete. This means that (unless P equals NP), no polynomial time algorithm can solve MAX-CLIQUE exactly on all inputs. However, there is a simple exponential time algorithm that does solve MAX-CLIQUE exactly: it just tries all potential cliques and checks which of them are present in the graph.

Finally, you mention that if a problem is NP-complete then the reason might be that there is no optimal solution. This is just wrong, and I suggest ignoring the source which led you to believe this statement.