1. Why is it that there is a difference between <ti> and <di> in Brazilian Portuguese and European Portuguese? In Brazil, they are pronounced [tSi] and [dZi], but in Portugal they are pronounced [ti] and [di]. I couldn't think of a way that a shift like this would happen simply from a language crossing the ocean, but I have a feeling that Tupi-Guarani might have something to do with it.
This isn't as widespread as you may think in Brazil. Southern dialects don't have this and I think
part of the Northern region also doesn't have this.
2. Why did the [l] ---> /u/ shift happen? Correct me if I'm wrong, but I think this is a feature unique to both variants of Portuguese as opposed to other romance languages. I personally like it a lot.
If you mean that Portuguese has <u> /u/ whereas some Romance languages kept <l> /l/ from Latin, it's pretty much L-vocalization, I think, as Hakaku pointed out. It still happens in B. Portuguese - coda /l/ is pronounced as [w] in every dialect, AFAIK.
3. In Brazilian Portuguese, why is <s> when before a consonant and at the end of a word generally pronounced as [S]? Does this happen in European Portuguese?
I don't know the name of this particular process, but since Portuguese doesn't have phonemic coda /S/, I guess it follows the affricativization before palatals.
Also, this doesn't happen at all in Southern Brazilian dialects; I'd wager some dialects in Portugal also don't have this (AFAIK it does happen there too).