The call to myfn[DAA76647.1] should be intercepted during the conversion of input to expression.
You can see that the Login has the form RowBox[{"myfn", "[", RowBox[{"DAA76647", ".1"}], "]"}] :
In[1]:= myfn[DAA76647 .1] DownValues[InString] Out[1]= myfn[0.1 DAA76647] Out[2]= {HoldPattern[InString[1]] :> ToString[RowBox[{"myfn", "[", RowBox[{"DAA76647", ".1"}], "]"}], InputForm], HoldPattern[InString[2]] :> ToString[RowBox[{"DownValues", "[", "InString", "]"}], InputForm]}
We could create a special case definition for MakeExpression :
MakeExpression[RowBox[{"myfn", "[", RowBox[{"DAA76647", ".1"}], "]"}], f_] := MakeExpression[RowBox[{"myfn", "[", "\"DAA76647.1\"", "]"}], f]
You can see that now myfn[DAA76647 .1] works as desired:
In[4]:= myfn[DAA76647 .1]//FullForm Out[4]//FullForm= myfn["DAA76647.1"]
This approach can be generalized to something like
MakeExpression[RowBox[{"myfn", "[", expr:Except[_String], "]"}], form_] := With[{mexpr = StringJoin[expr /. RowBox -> List]}, Hold[myfn[mexpr]]] myfn[expr_String] := (* what ever you want to do here *)
Note that the Except[_String] really not needed ... since the following code will not do anything wrong with String.
Currently, the code only works with simple examples with a one-dimensional box structure. If you want something that handles more general input, you can add error checking or additional rules for things like SuperscriptBox and friends. Or hammer it with Evaluate[Alternatives @@ Symbol /@ Names["*Box"]] -> List so that all Box objects become lists and smooth everything.