3) If you use the "native" Classes/Controls/Objects of FPC/Lazarus, you need the "Trinity": Connection, Transaction, Query, interconnected as documented. That's all you need. There is some "other" stuff (DataMadoule etc. resp. ZEOS instead) you could use additionally, though
1+2) Open/Closing: It depends.
If it's a single-user accessing hat DB (only one user will use your program), then open at startup, close on exit. If it's multi-user, then it also depends, how many users want to write to the DB at the same time. If you have more than one, open before needing, close after done. If multi-user, id'd use journal_mode=WAL (add as a connection-param).
EDIT: If it's a "real" Multi-user-environment, then SQLite is IMO the wrong DBMS (despite loving SQLite myself, i do know its limits). Then I'd rather go for a server-based DBMS (MySQL et al)