Both 하고 (actually just -고) and 그리고 mean "and".
The difference is that 그리고 is much heavier in nuance and length.
그리고 comes from 그리하고 which is a short form of "그렇게 하고", or "그렇다(고) 하고".
그렇게 하고 is like "with that done, ...", and 그렇다 하고 " with that said, ...".
What really distinguishes the two are their usages however.
-고 is short, light, and convenient, so it is used much more widely.
그리고 is longer, more emphatic, and can be used in the beginning of a sentence unlike -고.
You can look at some examples.
1) 밥을 먹고 학교에 가자. Let's eat and go to school.
2) 밥을 먹자, 그리고 학교에 가자.
In #1 "밥을 먹자" and "학교에 가자" are connected without even adding one syllable.
So it is very efficient and used all over the place in the language.
#2 is preferred if you want to say it slowly, draw extra attention, and the like.
Another distinct difference is when "and" is used in the beginning.
Ex: "And then there was you"
1) It is not possible to use -고 since it requires a preceding verb.
2) 그리고 네가 있었다.
So, for the relatively short "and" in English, Korean has the even shorter -고 and the much longer 그리고.
"but" is also very similar, with -만 and 그렇지만/하지만.
그렇지만 comes from "그렇게 하지만", "그렇다(고) 하지만" (that is so, yet...).
Examples.
"He is tall but can't play baseball."
1) 그는 키가 크지만 농구를 못한다.
2) 그는 키가 크다, 그렇지만/하지만 농구를 못한다.
"Everything worked out. But then a problem came up."
1) not possible to make two sentences using -만
2) 다 잘 되었다. 그러나 문제가 하나 생겼다.