Partiamo dal "PS", perchè mi pare che non hai ben capito come funzionano le cose:
PHP "gira" sul server e il suo output viene inviato come risposta http alla richiesta del client. Come puoi capire il client ed il server comunicano attraverso questo meccanismo di request-response. Va da se che non ci può essere un "collegamento" diretto tra la pagina e una funzione/oggetto php...visto che non c'è più un contesto php
Nel tuo esempio ScaricFile() viene eseguita al momento della richiesta e non certo al submit della form, anche perchè la tua pagina come action ha il risultato della funzione (probabilmente nulla, visto che non è definito il file da scaricare).

Invece il primo esempio è corretto, perchè la action porta su una pagina php. E si..ti servono due file:
- Quello dove mettere il form/link per effettuare il download
- Quello che effettivamente ti fa il download

Per quanto riguarda gli header...quelli son inviati dal server al client quindi non avrai nessun problema legato alla sicurezza, mentre nel .htaccess basta che inserisci le direttive per negare l'accesso hai file