As far as the scrolling goes, I'm fairly certain they're just using native scrolling (as in, not using a JS implementation that doesn't get the weighting right). The AMP Runtime needs to know scroll position, and they seem to just be capturing scroll information on the scroll event
See https://github.com/ampproject/amphtml/blob/master/src/servic...
I may be wrong on this, as I don't know enough about the codebase. However, I'm pretty sure it's just native scrolling.