My question is, even if you load BTC to your smartcard's address without connecting it to your computer somehow, how does the card know how much is on it? Seems to me it'd be up to memory and luck to make sure you didn't overdraft, which would end up sending an invalid tx anyway.
Loading is simple just send funds to an address the card has.
Making the card aware of its current balance is a different thing obviously that requires (indirect) access to the blockchain. One option would be to keep the number of private keys relatively small and have that performed as part of every transaction. Each tx the card says "here is a list of my keys", and the POS machine says "here is your list back w/ your balances". Users could do the same thing at home with smartcard reader.
More importantly, how do you set your pin without a central authority doing it for you? I think it's also worth noting that if a card continuously re-uses a single address, then it kinda kills your privacy too.
PIN would be internal to the card. I would imagine a system as simple as connect card to computer, enter old pin, hit change pin, enter new pin. There would be no registry of PINs because each card would be smart enough to validate its own PIN.
The simplest solution which provides minimal privacy would be to have deterministic key generation.
All funds are held in one address (value address), all tx send balance to change address which becomes the value address, and the card "forgets" the old value address.
Address A (100 BTC).
Tx1: A (100 BTC) -> M1 (10 BTC) & B (90BTC)
Tx2: B (90 BTC) -> M2 (15 BTC) & C (75BTC)
Tx3: C (75 BTC) -> M3 (5 BTC) & D (70BTC)