Why am i getting "missing right parenthesis" error when i try to LOG ERRORS when loading from an external table?
Because the DML error logging (LOG ERRORS INTO ...) part belongs to the outer insert, not the inline external table. Move it out from the inner part.
External tables have a different kind of error logging, another file can be specified with the BADFILE clause where the rows with errors are logged.
Update:
Something like this:
insert /*+ ignore_row_on_dupkey_index ( enzyme ( enz_name ) ) */
into enzyme
SELECT enz_name FROM EXTERNAL ((
  construct_id NUMBER(10),
  n_term VARCHAR2 (50),
  enz_name VARCHAR2 (3),
  c_term VARCHAR2 (50),
  cpp VARCHAR2 (50),
  mutations VARCHAR2 (50),
  mw_kda NUMBER (7, 3))

    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY data_to_input
    ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        skip 1
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;'
        MISSING FIELD VALUES ARE NULL 
        ) 
    LOCATION ('CONSTRUCT.CSV')
    ) ext
    where not exists (
        select * from enzyme e
        where e.enz_name = ext.enz_name
    )
LOG ERRORS INTO ERR$_ENZYME ('INSERT') REJECT LIMIT UNLIMITED;