Lauren's analysis is excellent. But there is one thing to add. Language is not a machine. It does not work by machine rules. It works by context and suggestion.
Her father had given it to her...
This sentence establishes the context of what follows it. The use of had here is essential because it establishes the context of the gift in relationship to the narrative present (the time of the story).
Mechanically speaking, everything that follows that sentence is past relative to the narrative present, so requires had as well. But contextually it does not because the work of establishing the relationship between times has been done. Therefore you can drop the had, which does make the sentences a little clunky to read, without the reader losing track of which time they refer to.
Everything Lauren says about '"a continuing action in the past," as opposed to "a completed action in the past."' is true, but ask yourself if the distinction matters. Does it matter in context if the book gave her goosebumps then but not now or if it still gave her goosebumps? If it does, make that distinction explicitly. Don't rely on the reader to get it from the grammar. If it does not matter, don't fret about it. If it does matter, you could do something like this:
She closed the book her father gave her. It no longer gave her goosebumps the way it had when she first read it three months ago.
In other words, if the change in her reaction is what matters, thump the reader over the head with the idea that her reaction has changed. If you don't, most reader simply will not notice.
Also notice that there is no need for "had given" in this passage (though it would certainly fit). The time relationship is established by "three months ago" in the next sentence. It is established using story techniques, not grammatical techniques.
Readers simply don't parse sentences the way grammarians do (this is why grammarians walk around the world in a state of constant agitation at the way things are written). They parse stories, looking for the sequences they expect and recognizing them were they find them. They follow the story cues, not the grammar cues. Thus having cast us into the past with "had" in the first sentence, you can safely drop it for the remainder of the passage (unless there are other sources of ambiguity in that passage that might cast doubt on the context -- but if there are you should probably recast as people are going to get lost anyway).
To put it another way: grammar establishes simple meaning. It establishes which words are which part of speech in a sentence so that you can parse the sentence. Grammar also reflects more complex meanings (the time relationship of one event to another) but should not be relied upon to communicate such relationships fully to the reader. Use story technique, not grammatical techniques, to establish the relationships that matter. Just make sure your grammar is not actively at odds with what the story techniques are saying.
(By the way, this is why it is possible to detect when the grammar of a sentence is wrong. The story techniques are saying one thing, which comes across despite the flaws in the grammar. Thus we know what the sentence is trying to say, and can therefore deduce what the conventional grammatical way to say that would be. If this were not the case, if meaning relied on grammar alone, we would be unable to detect or fix incorrect grammar because we would have no way to detect the writers intent. We would just have a sentence we did not understand. We would have no clue to what it was trying to say or how to fix it.)