No, la tua possibile es. ReadElementException può estendere Exception (o magari IOException). Poi l'eccezione di più basso livello (la "causa") la passi al costruttore della tua eccezione.
Guarda ad esempio un sorgente di IOException, vedi che ha 4 costruttori, che sono quelli tipici: nessun argomento / String / String + Throwable / solo Throwable. Non si è obbligati ovviamente a metterli tutti, dipende dal senso e uso della eccezione.
Sicuramente non nel readElement. E comunque non ha granché senso (in questo tuo scenario) creare un file "vuoto" tanto per crearlo come "default". La serializzazione degli oggetti si basa su un protocollo di dati ben preciso che prevede in testa allo stream un "header" di 4 byte speciali. Se fai il file vuoto con f.createNewFile() e poi NON vai a serializzare davvero oggetti, al prossimo readElement il file c'è (non becchi FileNotFoundException) ma l'header è mancante e il costruttore di ObjectInputStream si schianta perché è già lì che cerca di leggere l'header.
Puoi fare: classe non generica, poi readElement "generico" che riceve Class e filename. Non c'è nulla di male di per sé.