Oh, this is a tricky one, because it involves topicalisation. It is very unusual to say it like this, unless you want to put a strong focus on gegeben (and a secondary focus on das Buch).
The unmarked syntactic order for a V2 sentence would be Hans hat dem Lehrer das Buch gegeben.
The underlying structure (V-final) is Hans dem Lehrer das Buch gegeben hat. So you move hat into C position and gegeben into SpecC. The other constituents stay where they are.
However, I don't understand what you mean by "I have to remove "dem Lehrer das Buch" to become adjunctions to Verb Phrase (VP)" Where do you remove them from? I also think they should not be adjuncts, but arguments, since geben is a three-place verb and the direct and the indirect objects are obligatory (if you left them out, the sentence would be ungrammatical), so you shouldn't merge them with the VP by adjunction; rather, they should be included in the VP.
My analysis of the sentence would be:

Yes, I know, ternary branching is an ugly thing to do, but I don't want to start blowing up the tree with little v or anything to make it nice and binary.
And yes, I know, if you want to make THE univeral syntax theory you can include a lot more empty categories and stuff (like I or T or whatever you may call it, for which there is no evidence they need to be assumed to exist for German).
But there is no satisfying univeral theory of syntax anyway so let's just keep things simple, I think it should be clear what it means.
Update
If we need to move the whole VP instead of just the V, in order to be able to analyse the sentence Dem Lehrer das Buch gegeben hat Hans, we would probably have someting like this:

(The end of the arrow and the index are meant to belong to the VP, not to "gegeben". I couldn't figure out yet how to do this for non-terminal nodes in tikz-qtree, so just imagine the movement goes to the VP and not to V.)
If we then wanted to move only the verb, maybe adjunction is really still the best solution, so:

(Again, trace and end of arrow are meant to refer to VP.)
So we would end up with an adjunct-like structure, just as you said. This looks really unsatisfying to me, but this is still the best I can think of.
Update 2
I read up on the problem in Wolfgang Sternefeld's "Syntax" (2008) which probably comes the closest to the standard German syntax book if there is such a standard, and on p. 337 I found a parargraph about topicalisation of VPs which essentially says:
"Traditionally it is assumed that there must only be maximal projections in specifier positions, but there are sentences like Gemietet_i hat_j [.VP er das Haus nicht t_i t_j] where it seems to be possible to have a V head in SpecC."
So here it is assumed that my first solution would be okay.
However, the evidence for why it can't be a VP that is moved into SpecC is provided by the example * [.VP er das Haus nicht gemietet] hat, which is obviously ungrammatical, but as far as I see only because er (corresponding to our Hans) is moved as well, i.e. the VP under C' instead of the one under V' as in my solution, while if we moved only the latter one, we would get [.VP das Haus nicht gemietet] hat er t_i t_j which seems okay to me, or at least just as marked as the other sentenes.
So I'm not sure that's a definite argument for allowing non-maximal projections (i.e., a V head) to be moved into SpecC and therefore for accepting my first solution.
Edit: A page later, on the other hand, it is also noted that phrasality has a differnt status in classical X-bar theory than in minimalist one; since phrasality in minimalism is not an inherent property to constituents but only defined relatively, the item in SpecC is, being a non-head, automatically "locally phrasal", which would again support allowing V to stand alone in SpecC.