There's already an answer to the first half of your question. Here's an answer to the second half:
The BSD license does not give the permission to re-license and for this reason the final user always gets all permissions from the original author who put the file under the BSD license
Correct.
and who would need to give his explicit OK.
They already did by offering their work under the BSD license.
The BSD license permits to add code under a different license but then you would need to clearly mark every line that is under this different license.
I don't understand where this claim is coming from. The BSD license doesn't require it. No law requires it as far as I know.
Given that the GPL is for complete works only, the GPL would not permit you to put parts of the code under GPL.
This is a common misunderstanding of clause 2b of GPLv2. Here's the clause that seems to be saying this:
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any part
thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
Notice two very important details here. First, it doesn't say that you have to license anything. It just says you have to cause the entire work to be licensed. And notice that it doesn't say "under this license" but "under the terms of this license".
To have a license that is under the terms of the GPL, you just have to be able to exercise the rights the GPL gives you subject to the conditions the GPL requires and not violate anyone's copyrights. Since the 3-clause BSD license is a superset of the GPL, if you have a 3-clause BSD license, you have a license under the terms of the GPL (and also some additional things).
To have a license to a work as a whole, you just need a license to all the protectable elements expressed in that work. This is met in the case of a combined work.
By distributing the work to people, you are causing them to receive a BSD license to those protectable elements covered by that license and a GPL license to those protectable elements covered by that license.
There are no other protectable elements, so that is a license to the work as a whole. And it is under the terms of the GPL because you get all the rights the GPL gives you if you comply with only the GPL's restrictions without violating any copyright to any protectable elements in the combined work.
So this is not a relicensing requirement, it's a cause to be licensed requirement. It doesn't require a license under the GPL, just under the terms of the GPL (that is, a compatible license). And there's no special "license to the entire work", an entire work is a collection of protectable elements, each of which you need a license to. There's no extra "complete work license" that you need.
So, going back to "the GPL would not permit you to put parts of the code under GPL." Nothing in the GPL says that and clause 2b is carefully worded to make this work. You can apply clause 2b to any original protectable expression. Clause 2b would, of course, then apply to any work containing that protectable expression unless it was also offered under a different license by its original author or assignee.