a. Yes and no - sprites may not be rectangular, eg. if you use custom shapes. Currently the actual uv region will still be rectangular, though. If you turn on dicing, the UVs will be all over the texture, a rectangle for each dice. It may be rotated / flipped as well so keep that in mind - tk2d 2.3 allows you to disable rotation, but this will obviously result in less efficient packing.
b. sprite.CurrentSprite.uvs is an array of the UVs for the texture. You can use this to get the data you need. tk2dSpriteGeomGen.GetClippedSpriteGeomDesc is commented quite comprehensively, should help work out where you can extract the data from directly instead of iterating over all the uvs and finding min/max. To pass it to your shader I strongly recommend using MaterialPropertyBlocks (Renderer.SetPropertyBlock)