Here what is going on, `aTestFunction` was created in ``aPackage` `` context, then you've removed it and since the current context is ``Private` `` the definition is created for that symbol.

New symbols are created in current `$Context` during read time, `::usage` line makes `aTestFunction` an exported symbol. After `Remove` it's no longer there and your definition is read in ``Private` `` context.

 BeginPackage["aPackage`"]; 
 aTestFunction::usage = "aTestFunction usage"; (*1*)
 Begin["`Private`"];
 Remove[aTestFunction]; (*2*)
 aTestFunction[arg_] := arg + 1; (*3*)
 Protect[aTestFunction];
 End[];
 EndPackage;


----------


 ?aTestFunction


> Information::notfound: Symbol aTestFunction not found. >>


----------


 ?aPackage`Private`aTestFunction

[![enter image description here][1]][1]


 


 [1]: https://i.sstatic.net/vcY1N.png