split the db into a front end which contains all the user interface (the forms, queires reports and so on) and the data in the back end
deploy as an MDE (or at least deploy the front end as an MDEso people cannot look at, modify or whatever your front end
talk to someone expert in the field of licencinsg as to what you can or can't do in terms of activation code. I seem to remember there beeing a nasty court case a while back which a developer who put in timed activations codes lost.
one way to is build in obsolecence into the app. say you put a date validation which can't be more than a specific point in time, say one year.. with a warning after nine months the licence is about to expire. allow users to keep entering data after the expiry of the date, but don't report it anywhere, and don't let the data after the expiry point to be displayed or used in aggregations.
examining the lock file for the data component/back end should allow you to determine who (computer and user) has got the app open. it should be possible to work out how many copies are open and take appropriate actions.
stopping people making copies is far far trickier.
you can write an install script which requests an activation code from you. if you want you can probably get the logical disk id using one of the system functions possibly via vbscript
ultimately Access isn't an especially secure development environment. its realtively easy to circumvent the casual script kiddie. its much harder deterring a direct attack from a determined and knowledgeable attacker