I was wondering if it is possible to make a formal definition of what it means for a functor to be forgetful. That is, using only the terminology of categories. I have seen so many examples of forgetful functors, but they have always been specific examples, and the fact that they were forgetful was "clear simply from what we untuitively mean by forgetful. So, is there a formal definition?

This is very difficult to do. The Stuff, Structure, Property approach coined by Jim Dolan, John Baez and Toby Bartels is the best formalization I've seen. Here is the synopsis from the nLab page:
Here is a counterpoint to some of the other responses. It's true that the abstract approach of Stuff, Structure, Property may seem sketchy (especially the passage to the core groupoid) but it is in fact surprisingly correct for some very broad classes of concrete categories with very rich notions of forgetfulness. One such class (one that I am more familiar with) are the categories Mod(T) of models of a firstorder theory T. There are three very distinct ways of forgetting things in Mod(T):
In the absence of evil and under other ideal conditions, the functorial characterizations of Properties, Structure, and Stuff translate to important results in model theory (various definability, interpolation, and consistency theorems). The translations are sometimes a little on the weak side, but I think that with adjustments to account for type information not captured by the theory alone, the translation can be made broader and even more precise. To me, this is strong evidence that Stuff, Structure, Property is indeed the correct way to translate these notions of forgetfulness from the concrete to the abstract. While it's true that talking about forgetfulness without knowing what you're forgetting is nonsensical in when looking at particular instances, this approach provides a way of abstracting and even reasoning about forgetfulness in a completely general setting. PS: Note that I am not a category theorist, I'm just a very impressed outsider. I suspect that category theorists have even stronger intuitions for Stuff, Structure, Property approach. 


Here is a proof that every functor is "forgetful." Let $F: \mathcal{C} \to \mathcal{D}$ be a functor. Then $\mathcal{C}$ is equivalent (in fact, isomorphic) to the category of pairs $(x, y) \in \mathcal{C} \times \mathcal{D}$ such that $F(x) = y$, where morphisms are pairs $(f, F(f)): (x, y) \to (x', y')$. Under this equivalence, $F$ is the functor to $\mathcal{D}$ that "forgets $\mathcal{C}$." This seems like a silly construction, but it is simply the restriction of the projection functor $\mathcal{C} \times \mathcal{D} \to \mathcal{D}$ to the graph of $F$, and if we believe that the former functor is forgetful, then surely its restriction to a subcategory should be forgetful. The adjective "forgetful" is only meaningful when it is placed into the context of some specified extra structure (or the various generalizations of "structure" suggested by BaezDolanBartels) that one is supposed to be forgetting. For instance, if the structure one cares about is "algebras over some arbitrary monad," then Beck's monadicity theorem gives necessary and sufficient conditions for a functor to be "forgetful" in this sense. Without specifying such a context, "forgetful" is meaningless. 


As other interlocutors have said, the answer is basically "no", in that there are various different things that deserve to be called "forget" or not. In the TannakaKrein story, depending on exactly how you word it, (additive) functors deserve to be called "forget" if they are faithful and exact. In much of algebra, "forget" should mean something like "faithful with a left adjoint ("free")". But if you're writing a paper, the correct thing to do is to say something like "We have a functor $\text{Forget}: \mathcal C \to \mathcal D$ forgetting this and that; it has XYZ properties." 


I don't think there is. You can for example look at the wiki page for forgetful functors to see that the functors commonly referred to as forgetful can be quite different from one another. A lot of them are fully faithful, some are just faithful and some are not even that. One hope one might have would be to define it as a right adjoint to some type of functor (some sort of "free object" functor) as discussed in this question here on MO. This has it's drawbacks since, as discussed in the Wiki page mentioned above, there are forgetful functors that do not have a left adjoint. 

