Descerning the original values from the user filled-in is easy, as the additional values entered by a user are not added to the original choice field definition, which will remain unaltered.
So, in order to retrieve all the list items where the choice field value is not one of the predefined values, you need to build a CAML query with the NEQ operator on the choice field. Eg:
<FieldRef Name='MyField'/><Value Type='Choice'>Choice1</Value>
So, to say it in English, the idea is to retrieve all the list items where the choice field value is not equal to any of the predefined values.
You can get all the predefined values of a choice field with both JSOM and C#. For an example of using the JSOM see this post on SE
See the screenshots below to better understand what I mean:
here's the original choice field definition
here's the new item form.
As you can see on the left, the list has two items with custom (filled-in) values for the choice field (custom value1 and custom value2). However, the dropdown on the new form, still shows only the 3 choices that were originally set when creating the ChoiceField column.
This is what I meant: for any value you can find on an item ChoiceField field, you can always tell if it is one of the predefined values (Choice #1;Choice #2;Choice #3) or a custom value inserted by the user.