From the computational linguistics point of view, and especially targeting moderately inflected languages, a lexeme can be thought as a set of all inflected forms of a word. Such a set - a lexeme - can be represented by something uniquely describing it, which is usually a lemma, a basic form of the word (this is quite language dependent). The stem can be thought as a "poor man's lemma", a part of the word that remains unchanged (there are exceptions, though - e.g. if the root morpheme mutates predictably in some cases, stemming can "undo" this mutation) and in some circumstances it could be used to represent a lexeme (but usually isn't).
Stemming is usually performed by a relatively simple algorithm without deeper linguistic consideration (such as meaning, homonymy etc.) and used for full text searches and such.
So, in English (a bad language to base an example on), a set {run, ran, running, runs}, usually with a connection to its meaning, and/or part of speech (thus depending on your level of abstraction, "run" as a noun can be a different lexeme {run, runs}) is a lexeme. A natural way of representing the lexeme is the lemma "run"; your stemming algorithm will likely give you the "run" stem as well, but it might fail for the "ran" word form.